用于图形化的SQL查询

用于图形化的SQL查询

所以我有一个数据挖掘程序,它记录了大量视频流的收视率数据。溪流不是24小时都在上涨。应用程序每60秒检查一次每个流的状态。
我有两个表,一个“数据”表,其中包含时间戳、流名称和当前查看器的列。仅当流处于活动状态时才添加记录。另一个表是totals表,它包含时间戳、总收视率和直播流的数量。
我要做的是制作一个特定时间段内特定数量流的收视率图。
目前我正在做这个来得到总数:

SELECT DATE_FORMAT(FROM_UNIXTIME(timestamp), "%k:%i") as time, viewers FROM
`tftv_totals` WHERE timestamp BETWEEN <START> and <END>

然后,如果我想要单独的流,我对每个流执行此操作,并在excel中手动组合它:
SELECT timestamp, viewers FROM `tftv_data`
WHERE timestamp
    name = <Stream Name>
    BETWEEN <Start> and <End>

我想知道是否有任何方法可以产生这样的输出:
+------------+---------+---------+---------+
|时间戳|流1 |流2 |流3|
+------------+---------+---------+---------+
|1361962826 | 2 | 3 | 0|
|1361962886 | 3 | 4 | 0|
|1361962946 | 4 | 8 | 0|
+------------+---------+---------+---------+
关键是stream3一直处于离线状态。
我可以在PHP中做到这一点,但我希望为了方便起见,可以将它保存在SQL中,并且希望有一种方法可以比两个嵌套循环更高效地实现它。

最佳答案

可能是这样的:

SELECT
    timestamp,
    SUM(CASE WHEN tftv_data.name='stream1' THEN tftfv_data.viewers ELSE 0 END) AS stream1,
    SUM(CASE WHEN tftv_data.name='stream2' THEN tftfv_data.viewers ELSE 0 END) AS stream2,
    SUM(CASE WHEN tftv_data.name='stream3' THEN tftfv_data.viewers ELSE 0 END) AS stream3
FROM
    tftv_data
GROUP BY
    timestamp

关于mysql - 用于图形化的SQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15157471/

10-13 08:47