mysql - MySQL COUNT IF 与 GROUP BY
问题描述
我正在尝试解决这个 LeetCode 问题(https://leetcode.com/problems/get-highest-answer-rate-question/):
我已经在survey_log
本地生成了:
mysql> select * from survey_log;
+------+--------+-------------+-----------+-------+-----------+
| uid | action | question_id | answer_id | q_num | timestamp |
+------+--------+-------------+-----------+-------+-----------+
| 5 | show | 285 | NULL | 1 | 123 |
| 5 | answer | 285 | 124124 | 1 | 124 |
| 5 | show | 369 | NULL | 2 | 125 |
| 5 | skip | 369 | NULL | 2 | 126 |
+------+--------+-------------+-----------+-------+-----------+
我想使用这个辅助表:
mysql> select question_id, if(action='show', 1, 0) as is_show, if(action='answer', 1, 0) as is_answer from survey_log;
+-------------+---------+-----------+
| question_id | is_show | is_answer |
+-------------+---------+-----------+
| 285 | 1 | 0 |
| 285 | 0 | 1 |
| 369 | 1 | 0 |
| 369 | 0 | 0 |
+-------------+---------+-----------+
接下来,我想做的是得到每个is_show
和is_answer
列的总和question_id
。我认为这会起作用:
mysql> select question_id, count(if(action = 'show', 1, 0)) as show_count, count(if(action = 'answer', 1, 0)) as answer_count from survey_log group by question_id;
+-------------+------------+--------------+
| question_id | show_count | answer_count |
+-------------+------------+--------------+
| 285 | 2 | 2 |
| 369 | 2 | 2 |
+-------------+------------+--------------+
但是,这并没有给我预期的输出
+-------------+------------+--------------+
| question_id | show_count | answer_count |
+-------------+------------+--------------+
| 285 | 1 | 1 |
| 369 | 1 | 0 |
+-------------+------------+--------------+
最后一个查询有什么问题?我查看了https://dev.mysql.com/doc/refman/8.0/en/counting-rows.html但似乎无法将其应用于此问题。
解决方案
COUNT
只计算非空值。所以两者0
都会1
被计算在内。你需要做的是SUM
他们:
select question_id,
sum(if(action = 'show', 1, 0)) as show_count,
sum(if(action = 'answer', 1, 0)) as answer_count
from survey_log
group by question_id;
请注意,由于 MySQL 在数字上下文中将布尔值视为 0 (false) 或 1 (true),因此您可以删除if
查询的部分:
select question_id,
sum(action = 'show') as show_count,
sum(action = 'answer') as answer_count
from survey_log
group by question_id;
推荐阅读
- python - 在标签 data-reactid 上使用 python 从 espn 中提取数据
- vcf-vcard - 使用链接到图像文件的 URL 导入的“PHOTO”创建 VCF 文件
- javascript - 如何使用 URL-name 获取对象属性的值?
- typescript - VueJS - 只渲染一次组件
- python - 为什么这会输出为 1 2 6 24 而不是 24 6 2 1
- r - Dplyr 和 tidyverse - 变量模式之间的相关性(相同变量 VAR1_time1 和 VAR1_time2)
- python - Django 迁移:不反映变化 | 仅创建 id
- arrays - 为什么数组的总和不正确?
- xml - XSLT:使用 for-each-group 分组
- html - 如何使左/右图像/文本布局响应为上/下布局?