比方说,我正在尝试从2列(team和team_2)中计算SQL查询中Status = Active时存在的不同团队的数量。我该怎么办?
Team Team_2 Nationality Status
Crystal Palace FC Everton FC France Active
Crystal Palace FC Everton FC England Active
Everton FC Crystal Palace FC Ireland Sacked
Everton FC Crystal Palace FC England Active
在这种情况下,结果将为2
答案 0 :(得分:1)
没有更完整的规范,我们只是在猜测查询要完成的工作。
对该要求的一种可能解释:获取team
列中存在的一组值以及team_2
列中存在的一组值,将所有这些值合并为一个列表,然后从列表中消除重复项,并获得具有非NULL值的行数...
要满足此要求,我们可以执行以下操作:
SELECT COUNT(v.team) AS cnt
FROM (
SELECT t1.team
FROM mytable t
WHERE t.status = 'Active'
UNION
SELECT t2.team_2
FROM mytable t2
WHERE t.status = 'Active'
) v
请注意,UNION
集运算符将强制消除重复的值。如果我们向表中添加第五行('Foo','Bar','','Active')
,那么我们希望该查询返回4,因为我们正在计算四个不同的值...
该规范还有其他可能的解释,上述查询无法满足这些解释。
答案 1 :(得分:0)
好吧,您可以使用count(distinct)
:
select count(distinct team)
from t
where status = 'Active';