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子句结合使用,但要认真考虑应用程序代码中的数据显示问题,谢谢反馈。我们确实会在客户端显示数据。但我很高兴知道这是可能的。