4

あるテーブルからいくつかのフィールドを選択し、他のテーブルからカウントを返すこのクエリを実行しています。

私の問題: カウンター フィールドの 1 つがゼロをカウントする場合、それは数値 0 を返さず、単に空白です。これは私が試して解決したいことです。

SELECT mem.member_id, mem.screen_name, mem.firstname, mem.lastname, mem.country_code, 
mem.joined, rep.rep as reputation, com.cnt as comments FROM members AS mem
LEFT OUTER JOIN (
    SELECT member_id, SUM(awarded_what) as rep
    FROM members_reputation
    GROUP BY member_id) rep
    ON mem.member_id = rep.member_id
LEFT OUTER JOIN (
    SELECT member_id, COUNT(comment_id) as cnt
    FROM blog_comments
    GROUP BY comment_id) com
    ON mem.member_id = com.member_id
GROUP BY mem.member_id
ORDER BY mem.joined DESC

私が欲しいのは次のようなものです:

Screen Name      | Comments
-----------------|--------------------
marty76          | 0
jonnyBoy12       | 0
adamApple        | 12

しかし、私は代わりにこのようなものを得ています!

Screen Name      | Comments
-----------------|--------------------
marty76          | 
jonnyBoy12       | 
adamApple        | 12

サーバー側の言語を使用すると、null 値をゼロに置き換えることで簡単に修正できます。しかし、ゼロを SQL から直接取得したいので、カウントで並べ替えることができます。

どんな提案も素晴らしいでしょう。

4

5 に答える 5

4

IFNULL関数を試してください

SELECT mem.member_id, mem.screen_name, mem.firstname, mem.lastname, mem.country_code,  
mem.joined, rep.rep as reputation, IFNULL(com.cnt,0) as comments FROM members AS mem 
LEFT OUTER JOIN ( 
    SELECT member_id, SUM(awarded_what) as rep 
    FROM members_reputation 
    GROUP BY member_id) rep 
    ON mem.member_id = rep.member_id 
LEFT OUTER JOIN ( 
    SELECT member_id, COUNT(comment_id) as cnt 
    FROM blog_comments 
    GROUP BY comment_id) com 
    ON mem.member_id = com.member_id 
GROUP BY mem.member_id 
ORDER BY mem.joined DESC 
于 2012-04-04T14:16:18.577 に答える
1

変化する:

COUNT(comment_id)

IFNULL(COUNT(comment_id), 0)
于 2012-04-04T14:16:37.053 に答える
1

他の方法は次のとおりです。

 coalesce(count(comment_id),0)
于 2012-04-04T14:28:25.077 に答える
1

これにより、取得しようとしている結果が得られるはずであり、クエリよりもはるかに簡単だと思います。

SELECT mem.member_id, mem.screen_name, mem.firstname, mem.lastname,
  mem.country_code, mem.joined,
  SUM(awarded_what) reputation, COUNT(comment_id) comments
FROM members mem
LEFT JOIN members_reputation rep ON mem.member_id = rep.member_id
LEFT JOIN blog_comments com ON mem.member_id = com.member_id
GROUP BY mem.member_id
ORDER BY mem.joined DESC
于 2012-04-04T14:29:08.463 に答える
-2

ISNULLを使用できますか?

ISNULL(com.cnt, 0) as comments
于 2012-04-04T14:16:21.650 に答える