6

フィールドに整数または が含まれるテーブルがありますNULL

parent_id
2
4
6
NULL
NULL
45
2

代わりにIFNULL ステートメントを追加するにはどうすればans_countよいですか?0NULL

これが私の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
4

6 に答える 6

13

編集: 完全なクエリに基づく新しい情報

指定したクエリでカウントが 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

古い応答

あなたが何を見ているのか、何を見ようとしているのか、もっと詳しく説明していただけますか? Count は NULL を返すことはできません。

この一連のクエリを実行すると、カウントが常に 2 であることがわかります。NULL の parent_id の表示方法を (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;
于 2011-07-25T03:46:12.510 に答える
2

私はこれをテストしませんでしたが、うまくいくと思います

(SELECT IF( parent_id IS NULL, 0, parent_id) AS pid, COUNT(*) AS ans_count
   FROM qa
  GROUP BY parent_id) AS n
于 2011-07-25T03:12:43.090 に答える
1

ステートメントをラップするだけです:

IFNULL( 
  (SELECT parent_id AS pid, COUNT(*) AS ans_count
   FROM qa
   GROUP BY parent_id)
 , 0
) AS n
于 2011-07-25T03:13:08.073 に答える
1

あなたが話している動作を示す実際のデータと完全なクエリを投稿できますか? 私の経験でCOUNT(*)は、NULL になることはありません。

Count(*) は null を返すことができますか?

COUNT(*) は常に結果を返しますか?

于 2011-07-25T03:15:05.433 に答える
1

parent_id を数えてみましたか?

(SELECT parent_id AS pid, COUNT(parent_id) AS ans_count
   FROM qa
  GROUP BY parent_id)
于 2011-07-25T03:50:52.313 に答える
1
SELECT IFNULL(parent_id, 0) AS pid, COUNT(IFNULL(parent_id, 0)) AS ans_count
FROM qa
GROUP BY IFNULL(parent_id, 0)
于 2011-07-25T05:03:05.403 に答える