Mysql 使用来自不同行(具有相同日期)的数据对日期表中的结果进行分组
我有一个表,其中存储了每个位置每天的访客数量:Mysql 使用来自不同行(具有相同日期)的数据对日期表中的结果进行分组,mysql,Mysql,我有一个表,其中存储了每个位置每天的访客数量: id datum dag campus bezoekers "1" "2018-04-19" "4" "knt" "755" "2" "2018-04-19" "4" "mar" "238" "3" "2018-04-19" "4" "kat" "335" "6" "2018-04-20"
id datum dag campus bezoekers
"1" "2018-04-19" "4" "knt" "755"
"2" "2018-04-19" "4" "mar" "238"
"3" "2018-04-19" "4" "kat" "335"
"6" "2018-04-20" "5" "knt" "736"
"7" "2018-04-20" "5" "mar" "66"
"8" "2018-04-20" "5" "kat" "327"
"9" "2018-04-21" "6" "knt" "0"
"10" "2018-04-21" "6" "mar" "0"
"11" "2018-04-21" "6" "kat" "0"
图1
我想查询此表,以便得到以下结果:
DATUM KAT KNT MAR
19/04/2018 335 755 238
20/04/2018 327 736 66
21/04/2018 0 0 0
图2
(因此,对于每个日期一行,每个位置的访客数量列在一列中,位置名称作为列名)
到目前为止,我试过:
SELECT
datum
,
CASE
WHEN campus = "knt" THEN bezoekers
END AS "KNT"
,
CASE
WHEN campus = "kat" THEN bezoekers
END AS "KAT"
,
CASE
WHEN campus = "mar" THEN bezoekers
END AS "MAR"
FROM telling_dag
图3
但这(逻辑上)导致:
datum KNT KAT MAR
"2018-04-19" "755" \N \N
"2018-04-19" \N \N "238"
"2018-04-19" \N "335" \N
"2018-04-20" "736" \N \N
"2018-04-20" \N \N "66"
"2018-04-20" \N "327" \N
"2018-04-21" "0" \N \N
"2018-04-21" \N \N "0"
"2018-04-21" \N "0" \N
图4
因此,我的问题是:如何将上述结果(图4)在每个日期的一行中进行分组,并在列中的每个位置使用3个值(如图2所示)您必须在基准列上进行分组,如果只有一个非空元素可以使用MAX,则要得到您想要的结果:
SELECT
datum
,
MAX(CASE
WHEN campus = "knt" THEN bezoekers
END) AS "KNT"
,
MAX(CASE
WHEN campus = "kat" THEN bezoekers
END) AS "KAT"
,
MAX(CASE
WHEN campus = "mar" THEN bezoekers
END) AS "MAR"
FROM telling_dag
GROUP BY datum
您可以使用多个聚合函数中的任何一个与GROUPBY子句结合使用,但要认真考虑应用程序代码中的数据显示问题,谢谢反馈。我们确实会在客户端显示数据。但我很高兴知道这是可能的。