比方说,我有一个表像下面:选择行,其中有重复列
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实际上是解决方案所需要的。 –