0
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,因为对于所有名称及其实例,它始终为零。

4

4 回答 4

0

基于您的数据的列表:

SELECT name, metric FROM metrics GROUP BY name, metric HAVING SUM(metric_value) = 0
于 2013-05-31T06:17:51.393 回答
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演示

于 2013-05-31T06:21:18.427 回答
0

尽管这看起来有点像家庭作业....看看这是否给了你你想要的东西:

SELECT DISTINCT M1.Metric
FROM METRICS M1
WHERE NOT EXISTS (
    SELECT * FROM METRICS M2 
    WHERE M2.Metric <> 0
    AND M1.Metric = M2.Metric
)
于 2013-05-31T06:40:27.713 回答
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
于 2013-05-31T07:19:02.520 回答