比方說,我有一個表像下面:選擇行,其中有重複列
Name Score
----- -----
Don 3
Don 4
Don 0
Pat 3
Cat 5
如何編寫一個查詢,將篩選出名在比分是0?即:在上表中,查詢不能返回名稱「唐」以來,爲行唐的一個包含0。(我使用的是Oracle數據庫BTW)
比方說,我有一個表像下面:選擇行,其中有重複列
Name Score
----- -----
Don 3
Don 4
Don 0
Pat 3
Cat 5
如何編寫一個查詢,將篩選出名在比分是0?即:在上表中,查詢不能返回名稱「唐」以來,爲行唐的一個包含0。(我使用的是Oracle數據庫BTW)
select name
from your_table
group by name
having sum(case when score = 0 then 1 else 0 end) = 0
謝謝!出於好奇,有沒有其他辦法可以做到這一點?我在查詢中將此解決方案用作子邏輯,並且遇到了一些困難。在我的項目中有一個與年份相似的表格。我試圖獲得一個人在某一年有一定得分的行,但從來沒有一個0.所以我想知道如何將這個包含在我的where條件中。 – Devin
如果這個查詢不適合你,那麼應該問一個新的問題與確切的要求。單獨從你的評論我不知道你的問題是什麼。 –
,通常跳第一個解決方案對那些頭腦是一些與EXISTS
:
SELECT *
FROM players p1
WHERE NOT EXISTS (
SELECT 1
FROM players p2
WHERE p1.Name = p2.Name
AND p2.Score = 0
)
這裏有一個SQLFiddle showing it in action,返回
| NAME | SCORE |
|------|-------|
| Cat | 5 |
| Pat | 3 |
這個答案是相似的,但如果你想其他的方法:
select Name
from T1
group by Name
having Min(Score) > 0;
這假設Score
不能是負面的,從上下文來看,這看起來像一個非常安全的假設。如果您想忽略零分或更低分數的任何人,它仍然可以工作。如果您只想忽略零但仍然通過負值,則將測試更改爲having Min(Abs(Score)) > 0
。
刪除'plsql'標記(並用'oracle'替換它),因爲沒有跡象表明PL/SQL實際上是解決方案所需要的。 –