2016-05-04 11 views
1

で間違ったNULL値を返すidreferer_idMySQLのSELECT COUNT

enter image description here

、のは、私は2つの列でusersテーブルがあるとしましょう、彼のリファラはreferer_idになります。彼が自分でサインアップした場合、referer_idはNULLになります。

ユーザーの参照ユーザー数をカウントします。

あなたがNULLのカウントが0であるが、私は誰にも参照されていなかったユーザーの多くを持って見ることができるように私はこの

SELECT `referer_id`,count(`referer_id`) FROM `users` 
GROUP BY `referer_id` 

enter image description here

ようなクエリを持っています。これをどうすれば解決できますか?

+0

'NULL'値を比較して変なことを行うことができます。このリンクを見てみましょう。 'GROUP BY IFNULL(referer_id、-1)'のようなことをすれば、どうなるか見てみましょう。 –

+0

同じことですが、NULLは依然として0 – rmths01

答えて

1

私はこれが好きではありませんが、そこにはより洗練されたソリューションがあると思いますが、それは機能し、よりよい解決策を見つけるのに役立ちます。もう少し考えで

select 
    t1.id, 
    ifnull(t3.ct, 0) 
    from 
    temp t1 
    left join 
     (select 
     t2.referer_id, 
     count(t2.referer_id) as ct 
     from temp t2 
     group by t2.referer_id) t3 
    on t1.id = t3.referer_id; 

は、ここに副選択を回避オプションです:

select t1.id, ifnull(count(t2.referer_id), 0) 
from temp t1 
left join temp t2 on t1.id = t2.referer_id 
group by t1.id; 
1

私はこの問題の原因を理由説明できないにもかかわらず、私は次のように、他のソリューションとそれを考え出しましたこれは;)

SELECT `referer_id`, 
     if(`referer_id` is null, @num := @num + 1, count(`referer_id`)) as referer_id_cnt 
FROM `users`, (select @num := 0) tmp 
GROUP BY `referer_id` 

うーん、私は上記に書いたきたことは間違いなく正しい答えではありません。実際にこれがあなたを助けます。

SELECT `referer_id`,count(1) FROM `users` 
GROUP BY `referer_id` 

そしてHow to count NULL values in MySQL?

+0

「COUNT(1)」のトリックが私のために働いていました。 – Pengxer

0
SELECT `referer_id`,count(NVL(`referer_id`,0)) 
FROM `users` 
GROUP BY `referer_id` 
+0

残念ながら、彼の質問はNVL機能を持たないmysqlに関するものです。 ifnullはmysqlに相当するものです。しかし、このクエリw/ifnullを実行しても、オペレータが望むリファラがないものに対しては結果は返されません。 – ghenghy