我有一个简单的数据集,其中有时间让脚本完成各个步骤。时间是不可预测的,但主要是在特定时间范围内进行分组,但是我想以十分之一秒为单位进行绘制。 (我知道这很奇怪,这是一些报表可视化内容的要求)。我可以将case语句延长得很长,但是我认为有更好的方法可以做到这一点。那是什么方法?
-1
答案 0 :(得分:1)
您可以将范围放在临时表中。
CREATE TEMPORARY TABLE metric_ranges (
low NUMERIC(4,1) NOT NULL,
high NUMERIC(4,1) NOT NULL,
metric VARCHAR(10) NOT NULL,
PRIMARY KEY (low, high),
UNIQUE KEY (label)
);
INSERT INTO metric_ranges
VALUES (0.0, 0.1, '0-0.1'),
(0.1, 0.2, '0.1-0.2'),
(0.2, 0.3, '0.2-0.3'),
(0.3, 0.4, '0.3-0.4'),
(0.4, 0.5, '0.4-0.5'),
...etc...
然后将您的数据加入范围:
SELECT COUNT(t.thing) AS value, m.metric
FROM (
SELECT thing,
COALESCE(step1,0) +
COALESCE(step2,0) +
COALESCE(step3,0) +
COALESCE(step4,0) +
COALESCE(step5,0) +
COALESCE(step6,0) +
COALESCE(step7,0) AS total
FROM mytable
) AS t
JOIN metric_ranges AS m ON t.total >= m.low AND t.total < m.high
GROUP BY m.metric
由您决定确保范围不重叠!
答案 1 :(得分:0)
如果某人有一个更有趣的答案,可以使事情变得更加任意(例如,它是一个int而不是float,或者可以随意设置bucket的大小),那么使用ROUND和group by列对我来说就足够了希望看到这一点并将其标记为答案。
SELECT
COUNT(thing) AS value,
ROUND(COALESCE(step1,0)+COALESCE(step2,0)+COALESCE(step3,0)+COALESCE(step4,0)+COALESCE(step5,0)+COALESCE(step6,0)+COALESCE(step7,0),1) AS metric
FROM table
GROUP BY metric