繁体   English   中英

SQL帮助:复杂查询

[英]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 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演示

即使这看起来像是家庭作业,也很可疑...。看看这是否给您带来了帮助:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM