2013-05-31 50 views
0
table : metrics 

列:查詢SQL幫助:複雜的查詢

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應當返還,因爲它始終是所有名稱及其實例爲零。

+1

請張貼一些示例數據和您任職預期輸出 –

回答

0

您正在尋找這樣的事情?

SELECT metric 
    FROM metrics 
GROUP BY metric 
HAVING SUM(metric_value) = 0 

這裏是SQLFiddle演示

UPDATE如果metric_value可以有負值,然後用這一個

SELECT metric 
    FROM metrics 
GROUP BY metric 
HAVING SUM(ABS(metric_value)) = 0 

這裏更新SQLFiddle演示

+0

工作!謝謝。我腦海中不必要地複雜。 – pappuyaar

+1

請注意,如果一個度量是-5而另一個是5,那麼這將錯誤地產生結果。 –

+0

@ElectricLlama好點。謝謝!更新了答案。 – peterm

0

列表根據您的數據:

SELECT name, metric FROM metrics GROUP BY name, metric HAVING SUM(metric_value) = 0 
+0

。謝謝! – pappuyaar

0

儘管這看起來很像功課....看看這給你你以後:

SELECT DISTINCT M1.Metric 
FROM METRICS M1 
WHERE NOT EXISTS (
    SELECT * FROM METRICS M2 
    WHERE M2.Metric <> 0 
    AND M1.Metric = M2.Metric 
) 
+0

謝謝你的幫助..但我向你保證這不是家庭作業。 :) – pappuyaar

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