在 MySQL 中选择行作为列?

Pr0*_*0no 4 mysql sql pivot

考虑下表“视图”

user_id  _date       cnt
------------------------
1        2011-02-10  123
1        2011-02-11   99
1        2011-02-12  100
1        2011-02 13   12
2        2011-02-10   32
2        2011-02-11  433
2        2011-02-12  222
2        2011-02 13  334
3        2011-02-10  766
3        2011-02-11  654
3        2011-02-12   43
3        2011-02 13   27
...
100      2011-02-13  235
Run Code Online (Sandbox Code Playgroud)

如您所见,该表保存每个用户 (user_id) 每天 (_date) 的综合浏览量 (cnt)。我正在寻找一个将 user_ids 输出为列的 SELECT 查询,因此表数据将采用矩阵形式,如下所示:

_date         1    2    3 ... 100
---------------------------------
2011-02-10  123   32  766
2011-02-11   99  433  654
2011-02-12  100  222   43
2011-02-13   12  334   27     235
Run Code Online (Sandbox Code Playgroud)

这可以通过 SELECT 语句来完成吗?

ben*_*ado 5

如果您正在处理一组有限的用户 ID,您可以执行以下操作:

SELECT _date,
    SUM(CASE WHEN _user_id = 1 THEN cnt ELSE 0 END) AS user1,
    SUM(CASE WHEN _user_id = 2 THEN cnt ELSE 0 END) AS user2,
    SUM(CASE WHEN _user_id = 3 THEN cnt ELSE 0 END) AS user3,
    ...
FROM views
GROUP BY _date
Run Code Online (Sandbox Code Playgroud)

不过,这更像是一种黑客行为,而不是一个好的查询。