最近做了一套笔试题,其中有一道 SQL 的题目大概如下
- 已知数据表如下
day | result |
---|---|
2018-2-1 | 胜 |
2018-2-1 | 胜 |
2018-2-1 | 负 |
2018-2-2 | 胜 |
2018-2-2 | 负 |
2018-2-2 | 负 |
- 输出如下结果
day | 胜 | 负 |
---|---|---|
2018-2-1 | 2 | 1 |
2018-2-2 | 1 | 2 |
根据输出结果分析可知,该查询结果以 day 字段作为分组,并统计 result 字段中不同值的个数
(1)大多数情况下,我们遇到的问题是根据分组结果,统计每个分组的个数,其语法如下,此语法只能统计所有的记录个数,无法根据同一字段的不同值统计
SELECT COUNT(*) FROM table_name GROUP BY col_name;
(2). 根据同一字段的不同值统计,这里使用 SUM 函数和 CASE 语句实现,其语法如下
SELECT
day,
sum(CASE result WHEN "胜" THEN 1 ELSE 0 END) AS "胜",
sum(CASE result WHEN "负" THEN 1 ELSE 0 END) AS "负"
FROM
test
GROUP BY
day;
结果如下