用于绘图的SQL查询

时间:2013-03-01 12:11:30

标签: mysql sql

所以我有一个数据挖掘程序,它记录了大量视频流的收视率数据。溪流没有全天候运行。应用程序每60秒检查一次流的统计信息。

我所拥有的是2个表,一个“数据”表,其中包含时间戳,流名称和当前查看者的列。仅当流是活动时才添加记录。另一个表是总计表,它包含时间戳,总收视率和实时流数。

我要做的是制作一段特定时期内选定数量的流的收视率图表。

目前我一直这样做是为了得到总数:

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>

我想知道是否有任何方法可以产生这样的输出:

+------------+---------+---------+---------+
| timestamp  | stream1 | stream2 | stream3 |
+------------+---------+---------+---------+
| 1361962826 | 2       | 3       | 0       |
| 1361962886 | 3       | 4       | 0       |
| 1361962946 | 4       | 8       | 0       |
+------------+---------+---------+---------+

关键是stream3一直处于脱机状态。

我在PHP中可以做到这一点没有问题,但为了方便起见我希望将它保留在SQL中,希望有办法做到这一点,它比几个嵌套循环效率更高。

1 个答案:

答案 0 :(得分:0)

也许是这样的:

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