我有一个数据集,其中包含代表相同实体的不同统计数据的多个记录。
示例:
DEVICE METRIC SCORE WHEN
-------------------------------------------------
devA reads_per_sec 100 2011-03-01 12:00:00 AM
devA writes_per_sec 50 2011-03-01 12:00:00 AM
devA total_per_sec 150 2011-03-01 12:00:00 AM
devB reads_per_sec 200 2011-03-01 12:00:00 AM
devB writes_per_sec 50 2011-03-01 12:00:00 AM
devB total_per_sec 250 2011-03-01 12:00:00 AM
devC reads_per_sec 300 2011-03-01 12:00:00 AM
...
我想将此表中的所有内容转移到具有此结构的新表
DEVICE READS WRITES TOTAL WHEN
--------------------------------------------------
devA 100 50 150 2011-03-01 12:00:00 AM
devB 200 50 250 2011-03-01 12:00:00 AM
devC 300 50 150 2011-03-01 12:00:00 AM
...
我为数以千计的时间戳中的每一个设备提供了十几个“指标”。
如果我可以查看每个采样周期的设备的一条记录,查询给定设备的所有度量标准得分会容易得多。
所以,我的问题是,采用这种方法并执行它的最佳方法是什么?我并不是要求任何人为我做我的工作,但这超出了我对数据库的了解。
答案 0 :(得分:3)
这将重现您列出的预期结果:
SELECT t.device,
SUM(CASE WHEN t.metric = 'reads_per_sec' THEN t.score ELSE 0 END) AS reads,
SUM(CASE WHEN t.metric = 'writes_per_sec' THEN t.score ELSE 0 END) AS writes,
SUM(CASE WHEN t.metric = 'total_per_sec' THEN t.score ELSE 0 END) AS total,
t.when
FROM YOUR_TABLE t
GROUP BY t.device, t.when
ORDER BY t.device, t.when
如果您需要处理各种指标,则可能需要使用dynamic SQL。您需要获取唯一的度量标准值列表(除非您有外键引用的类型代码表):
SELECT DISTINCT t.metric
FROM YOUR_TABLE t
然后,在执行查询之前,为每个指标连接SUM(CASE ...
。