基于count()为非零,在SQL查询中选择值

基于count()为非零,在SQL查询中选择值,sql,join,subquery,Sql,Join,Subquery,我正在尝试编写一个SQL查询,该查询将根据JOIN with status表计算行的status列 我的记录基本上是:id | name | statusId,它是statuses表的外键。该表有:id | statusName 我收集每个不同statusId的计数。现在,我需要基于以下想法返回任何状态的Id-如果countstatus0>0,我需要返回status0,否则我需要检查status1,然后是status2等 我是否可以编写一个SQL查询来返回每一行的状态,其中包含JOIN、WHER

我正在尝试编写一个SQL查询,该查询将根据JOIN with status表计算行的status列

我的记录基本上是:id | name | statusId,它是statuses表的外键。该表有:id | statusName

我收集每个不同statusId的计数。现在,我需要基于以下想法返回任何状态的Id-如果countstatus0>0,我需要返回status0,否则我需要检查status1,然后是status2等


我是否可以编写一个SQL查询来返回每一行的状态,其中包含JOIN、WHERE、HAVING etc,而不包含if/else逻辑?

如果您需要正在使用的状态,那么use exists:

实际上,如果您只需要ID,您可以使用:

select distinct r.statusid
from records;

重新表述这个问题,您是否只想获取大表中的状态?怎么样

SELECT s.*
  FROM status s
 WHERE s.id IN (SELECT DISTINCT statusid FROM records);

从这个开始,它会让你走上正确的轨道

select a.*, b.*, c.cnt from table1 a
join table2 b on a.statusid=b.id
join (
select statusname, count(*) cnt
from table1 a join table2 b on a.statusid=b.id
group by statusname)c
on b.statusname=c.statusname

提示:使用havingStatus0、Status1等列在哪里。?你的桌子结构不清楚。
select a.*, b.*, c.cnt from table1 a
join table2 b on a.statusid=b.id
join (
select statusname, count(*) cnt
from table1 a join table2 b on a.statusid=b.id
group by statusname)c
on b.statusname=c.statusname