面试题解答

问题:利用下面表内容

日期 成绩
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


测试表声明:

面试题解答_第1张图片

测试数据,有变动,但是不影响结果

面试题解答_第2张图片

SQL执行结果:

面试题解答_第3张图片


你可能感兴趣的:(面试题解答)