如何在SQL查询中基于行中的值计算(*)所有不同的值?

时间:2019-06-05 22:15:38

标签: mysql sql

比方说,我正在尝试从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

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';