2019独角兽企业重金招聘Python工程师标准>>>
问题:利用下面表内容
日期 | 成绩 |
2005-05-09 | 负 |
2005-05-09 | 胜 |
2005-05-09 | 胜 |
2005-05-09 | 负 |
2005-05-10 | 胜 |
2005-05-10 | 负 |
2005-05-10 | 胜 |
如果要生成下列结果,该如何写sql语句?
胜 | 负 | |
2005-05-09 | 2 | 2 |
2005-05-10 | 2 | 1 |
解决方案:
-- 方案一:
SELECT
date,
SUM(
CASE
WHEN result = 1 THEN
1
ELSE
0
END
) AS '胜',
SUM(
CASE
WHEN result = 0 THEN
1
ELSE
0
END
) AS '负'
FROM
test
GROUP BY
date
-- 方案二:
SELECT
m.date,
m.胜,
n.负
FROM
(
SELECT
date,
count(*) AS 胜
FROM
test
WHERE
result = 1
GROUP BY
date
) m,
(
SELECT
date,
count(*) AS 负
FROM
test
WHERE
result = 0
GROUP BY
date
) n
WHERE
m.date = n.date
测试表声明:
测试数据,有变动,但是不影响结果
SQL执行结果: