使用 MySQL 将单元格值旋转到列中

Pivot cell values into columns using MySQL

当运行这个查询时:

SELECT * FROM content_events

我得到一个 table 这样的:

+------+-------------+
| hour | event_type  |
+------+-------------+
|    1 | loaded      |
|    2 | viewability |
|    3 | play        |
|    4 | loaded      |
|    1 | viewability |
|    2 | play        |
|    3 | loaded      |
|    4 | viewability |
|    5 | play        |
|    1 | loaded      |
|    2 | viewability |
+------+-------------+

我想旋转它,所以我这样得到它:

+------+--------+------+-------------+
| hour | loaded | play | viewability |
+------+--------+------+-------------+
|    1 |      2 |      |           1 |
|    2 |        |    1 |           2 |
|    3 |      1 |    1 |             |
|    4 |      1 |      |           1 |
|    5 |        |    1 |             |
+------+--------+------+-------------+

为此,我是否应该先创建一个名为 value 的虚拟列,在每个单元格中包含“1”?换句话说,做一个 select 这样的:

SELECT *, 1 as value FROM content_events

这会 return 这个:

+------+-------------+-------+
| hour | event_type  | value |
+------+-------------+-------+
|    1 | loaded      |     1 |
|    2 | viewability |     1 |
|    3 | play        |     1 |
|    4 | loaded      |     1 |
|    1 | viewability |     1 |
|    2 | play        |     1 |
|    3 | loaded      |     1 |
|    4 | viewability |     1 |
|    5 | play        |     1 |
|    1 | loaded      |     1 |
|    2 | viewability |     1 |
+------+-------------+-------+

然后使用那个 table 做一个支点?如果该假设是正确的,数据透视查询将如何?

如有任何帮助,我们将不胜感激。

期待得到答案! :)

非常感谢!

Mysql/most rdbms 使用条件聚合来做你想做的事。

SELECT
    hour
    ,COUNT(CASE WHEN event_type = 'loaded' tHEN event_type END) as loaded
    ,COUNT(CASE WHEN event_type = 'play' tHEN event_type END) as play
    ,COUNT(CASE WHEN event_type = 'viewability' tHEN event_type END) as viewability
FROM
    content_events t
GROUP BY
    hour
ORDER BY
    hour

sql-服务器为您解答。无需添加额外的 1 列

SELECT *
FROM
    content_events e
    PIVOT (
    COUNT(event_type)
    FOR event_type IN (loaded,play,viewability)
) p