table : metrics
列:
1. name : Name
2. instance: A name can have several instances
(Name: John, Instances: John at work, John at concert)
3. metric: IQ, KQ, EQ
4. metric_value: Any numeric
查询目标
找出所有名称的所有实例的metric_value
为0的指标。
数据的性质
名称的指标' M
'例如' X
'可能是10.但是对于相同的名称和相同的度量标准实例' Y
'可能是0
。在这种情况下,' M
'不应该退还。
编辑: 样本数据:
NAME INSTANCE METRIC VALUE
John At work IQ 0
John At home EQ 10
John At a concert KQ 0
Jim At work IQ 0
Jim At home KQ 0
Tina At home IQ 100
Tina At work EQ 0
Tina At work KQ 0
在这种情况下,只应返回KQ,因为对于所有名称及其实例,它始终为零。
答案 0 :(得分:0)
基于您的数据的列表:
SELECT name, metric FROM metrics GROUP BY name, metric HAVING SUM(metric_value) = 0
答案 1 :(得分:0)
你在找这样的东西吗?
SELECT metric
FROM metrics
GROUP BY metric
HAVING SUM(metric_value) = 0
这是 SQLFiddle 演示
更新如果metric_value可以有负值,那么请使用此值
SELECT metric
FROM metrics
GROUP BY metric
HAVING SUM(ABS(metric_value)) = 0
此处已更新 SQLFiddle 演示
答案 2 :(得分:0)
即使这看起来像家庭作业一样......看看这能给你带来什么:
SELECT DISTINCT M1.Metric
FROM METRICS M1
WHERE NOT EXISTS (
SELECT * FROM METRICS M2
WHERE M2.Metric <> 0
AND M1.Metric = M2.Metric
)
答案 3 :(得分:0)
大多数其他答案都假设metric
是正面的。 OP表示它可以是任何数字。以下是两种方法。
检查绝对值的总和:
SELECT metric
FROM metrics
GROUP BY metric
HAVING SUM(abs(metric_value)) = 0
明确检查没有非零值:
SELECT metric
FROM metrics
GROUP BY metric
HAVING SUM(case when metric_value <> 0 and metric_value is not null then 1 else 0 end) = 0