Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按计数分组的MySQL案例_Mysql_Group By_Case - Fatal编程技术网

按计数分组的MySQL案例

按计数分组的MySQL案例,mysql,group-by,case,Mysql,Group By,Case,我有三个问题 SELECT COUNT(question_id) AS correct_count, uID FROM mytable WHERE id >= 0 AND id <= 1000 AND correct = 1 AND answer_id IS NOT NULL GROUP BY user_id SELECT COUNT(question_id) AS incorrect_count, uID FROM mytable WHERE id >= 0 AND

我有三个问题

SELECT COUNT(question_id) AS correct_count, uID FROM mytable  WHERE id
>= 0 AND id <= 1000 AND correct = 1 AND answer_id IS NOT NULL GROUP BY user_id


SELECT COUNT(question_id) AS incorrect_count, uID FROM mytable  WHERE id >= 0 AND id <= 1000 AND correct !=1 AND answer_id IS NOT NULL GROUP BY user_id

SELECT COUNT(question_id) AS null_count, uID FROM mytable  WHERE id >= 0 AND id <= 1000 AND answer_id IS NULL GROUP BY user_id
如何使用CASE或IF将其作为单个查询连接起来

count只统计非null项,因此您可以将where子句转换为大小写表达式,当它们不匹配时返回null:

SELECT user_id, 
       sum(id >= 0 AND id <= 1000 AND correct = 1 AND answer_id IS NOT NULL) AS correctCnt, 
       sum(id >= 0 AND id <= 1000 AND correct !=1 AND answer_id IS NOT NULL) AS incorrectCnt,
       sum(id >= 0 AND id <= 1000 AND answer_id IS NULL) as nullCnt
FROM mytable  
GROUP BY user_id
SELECT   user_id,
         COUNT (CASE WHEN id >= 0 AND id <= 1000 AND correct = 1 AND answer_id IS NOT NULL THEN 1 ELSE NULL) AS correct_count, 
         COUNT (CASE WHEN id >= 0 AND id <= 1000 AND correct !=1 AND answer_id IS NOT NULL THEN 1 ELSE NULL) AS incorrect_count,
         COUNT (CASE WHEN WHERE id >= 0 AND id <= 1000 AND answer_id IS NULL) AS null_count
FROM     mytable  
GROUP BY user_id

这可能行得通,但它给了我一个超时时间,因为桌子太大了
SELECT   user_id,
         COUNT (CASE WHEN correct = 1 AND answer_id IS NOT NULL THEN 1 ELSE NULL) AS correct_count, 
         COUNT (CASE WHEN correct !=1 AND answer_id IS NOT NULL THEN 1 ELSE NULL) AS incorrect_count,
         COUNT (CASE WHEN WHERE answer_id IS NULL THEN 1 ELSE NULL) AS null_count
FROM     mytable
WHERE    id >= 0 AND id <= 1000  
GROUP BY user_id