質問
私はフィールドに整数を含むテーブルを持っていますまたは NULL
.
parent_id
2
4
6
NULL
NULL
45
2
ifNullステートメントを追加するにはどうすればよいですか ans_count
入力されます 0
それ以外の NULL
?
これが私のSQLコードです:
...
(SELECT parent_id AS pid, COUNT(*) AS ans_count
FROM qa
GROUP BY parent_id) AS n
アップデート
以下の完全なSQL-あなたの忍耐に感謝します。
SELECT *
FROM qa
JOIN user_profiles
ON user_id = author_id
LEFT JOIN (SELECT cm_id,
cm_author_id,
id_fk,
cm_text,
cm_timestamp,
first_name AS cm_first_name,
last_name AS cm_last_name,
facebook_id AS cm_fb_id,
picture AS cm_picture
FROM cm
JOIN user_profiles
ON user_id = cm_author_id) AS c
ON id = c.id_fk
LEFT JOIN (SELECT parent_id AS pid, COUNT(*) AS ans_count
FROM qa
GROUP BY parent_id) AS n
ON id = n.pid
WHERE id LIKE '%'
ORDER BY id DESC
解決
編集:完全なクエリに基づく新しい情報
カウントが指定したクエリでnullになる可能性がある理由は、左結合が比類のないレコードでnullを返すためです。したがって、サブクエリ自体はNULLカウントを返していません(したがって、すべての応答と混乱)。次のように、最も外側の選択でifNullを指定する必要があります。
SELECT qa.*, user_profiles.*, c.*, n.pid, ifnull(n.ans_count, 0) as ans_count
FROM qa
JOIN user_profiles
ON user_id = author_id
LEFT JOIN (SELECT cm_id,
cm_author_id,
id_fk,
cm_text,
cm_timestamp,
first_name AS cm_first_name,
last_name AS cm_last_name,
facebook_id AS cm_fb_id,
picture AS cm_picture
FROM cm
JOIN user_profiles
ON user_id = cm_author_id) AS c
ON id = c.id_fk
LEFT JOIN (SELECT parent_id AS pid, COUNT(*) AS ans_count
FROM qa
GROUP BY parent_id) AS n
ON id = n.pid
WHERE id LIKE '%'
ORDER BY id DESC
古い応答
あなたが何を見ているのか、何を見ているのかをもっと詳しく説明していただけますか?カウントはヌルを返すことができません。
この一連のクエリを実行すると、カウントが常に2であることがわかります。NullParent_idsの表示方法(nullまたは0として)を変更できますが、カウント自体は常に戻ります。
create temporary table if not exists SO_Test(
parent_id int null);
insert into SO_Test(parent_id)
select 2 union all select 4 union all select 6 union all select null union all select null union all select 45 union all select 2;
SELECT IFNULL(parent_id, 0) AS pid, COUNT(*) AS ans_count
FROM SO_Test
GROUP BY IFNULL(parent_id, 0);
SELECT parent_id AS pid, COUNT(*) AS ans_count
FROM SO_Test
GROUP BY parent_id;
drop table SO_Test;
他のヒント
私はこれをテストしませんでしたが、うまくいくと思います
(SELECT IF( parent_id IS NULL, 0, parent_id) AS pid, COUNT(*) AS ans_count
FROM qa
GROUP BY parent_id) AS n
あなたの声明にそれを包むだけです:
IFNULL(
(SELECT parent_id AS pid, COUNT(*) AS ans_count
FROM qa
GROUP BY parent_id)
, 0
) AS n
Parent_idを数えるだけで試しましたか?
(SELECT parent_id AS pid, COUNT(parent_id) AS ans_count
FROM qa
GROUP BY parent_id)
SELECT IFNULL(parent_id, 0) AS pid, COUNT(IFNULL(parent_id, 0)) AS ans_count
FROM qa
GROUP BY IFNULL(parent_id, 0)
あなたが話している動作を示す実際のデータと完全なクエリを投稿できますか?私の経験では、 COUNT(*)
決してヌルになることはできません。
所属していません StackOverflow