[英]SQL Help: Complex query
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,因为对于所有名称及其实例,它始终为零。
根据您的数据的列表:
SELECT name, metric FROM metrics GROUP BY name, metric HAVING SUM(metric_value) = 0
即使这看起来像是家庭作业,也很可疑...。看看这是否给您带来了帮助:
SELECT DISTINCT M1.Metric
FROM METRICS M1
WHERE NOT EXISTS (
SELECT * FROM METRICS M2
WHERE M2.Metric <> 0
AND M1.Metric = M2.Metric
)
其他大多数答案都假定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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.