SQL使用Distinct关键字的Select查询

3

使用这些数据

Team Name Won
X    Andy  1
X    Cara  1
X    Cara  1
X    Eric  0
X    Eric  0
X    Eric  0
X    Eric  0
Y    Bill  0
Y    Dave  0
Y    Dave  1
Y    Dave  1

我希望你能为每个团队提供参赛人数和获胜者数量的翻译。
Team Players Winners
X       3       2
Y       2       1

它用两个查询来完成:

select team, count(distinct Name) as Players from test group by team
select team, count(distinct Name) as Winners from test where Won=1 group by team

但是我无法想出在一行中完成它的语法。谢谢你的帮助。 John

3个回答

3

您可以使用case进行条件聚合:

select team,
    count(distinct name) as Players,
    count(distinct case when won = 1 then name end) as winners
from test
group by team

太好了。我使用四个链接的CTE得出了答案:这给出了相同的结果集,而且简单多了。我不知道一个case语句可以写成没有else的形式! - John Harbour

1

试试这个:

select team, count(distinct Name) as Players, sum(won) Winners 
from (select distinct * from test) tst 
group by team

您可以在这里测试:http://rextester.com/QATLK24197

1
你可以通过group by实现这一点。
选择team,计算name的数量并将其命名为players,以及获胜者数量并将其命名为winners,从以下内容中进行选择: 选择team、Name和sum(distinct won)作为won的总和,从test表中按照team和name进行分组。 最后再按照team进行分组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接