简体   繁体   English

MySQL CASE,按GROUP BY计数

[英]MySQL CASE with GROUP BY count

I have these three queries 我有这三个查询

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

How can I join this as a single query using CASE or IF ? 如何使用CASE或IF将其作为单个查询加入?

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

count only counts non- null items, so you could convert the where clauses to case expressions that return null when they do not match: count仅计算非null项,因此您可以将where子句转换为不匹配的case表达式,如果它们不匹配,则返回null

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

Note that all these case statements share some conditions, so those could be extracted to a where clause: 请注意,所有这些case语句共享一些条件,因此可以将这些条件提取到where子句中:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM