MySQL查询组参与者计数和IF isParticipant语句

MySQL查询组参与者计数和IF isParticipant语句,mysql,sql,if-statement,count,left-join,Mysql,Sql,If Statement,Count,Left Join,我有一个MySQL查询的问题,我无法解决它 初步情况如下: 我有一个包含用户的表和一个包含组的表。这两个表都由一个多通(组参与者)表连接 以下查询工作正常: SELECT id, COUNT(participant.groupId) AS participantsCount FROM group LEFT JOIN group_participant participant ON participant.groupId = id GROUP

我有一个MySQL查询的问题,我无法解决它

初步情况如下: 我有一个包含用户的表和一个包含组的表。这两个表都由一个多通(组参与者)表连接

以下查询工作正常:

SELECT 
    id, 
    COUNT(participant.groupId) AS participantsCount
FROM 
    group 
LEFT JOIN 
    group_participant participant 
ON 
    participant.groupId = id
GROUP BY
    id
现在,我想用一个过滤器扩展这个查询,该过滤器只返回我是参与者的条目,但不应影响参与者的计数

之后,如果用户是参与者或不是参与者,则可以在Select中指定一个标志

应该是这样的:

SELECT 
    id, 
    COUNT(participant.groupId) AS participantsCount, 
    IF(participant.userId = "87b67168-0d7d-46c5-9437-29f996b3d85d", 1, 0) AS isParticipant
FROM 
    group 
LEFT JOIN 
    group_participant participant
ON 
    participant.groupId = id
WHERE 
    participant.userId = "87b67168-0d7d-46c5-9437-29f996b3d85d" 
GROUP BY
    id

如何解决此问题?

如果您只希望参与的组,请删除
WHERE
子句,并在
HAVING
子句中设置条件:

SELECT 
    g.id, 
    COUNT(gp.userId) AS participantsCount
FROM group g LEFT JOIN group_participant participant gp
ON gp.groupId = g.id
GROUP BY g.id
HAVING MAX(CASE WHEN gp.userId = '87b67168-0d7d-46c5-9437-29f996b3d85d' THEN 1 ELSE 0 END) = 1 
在MySql这样的数据库中,您可以编写如下
HAVING
子句:

HAVING MAX(gp.userId = '87b67168-0d7d-46c5-9437-29f996b3d85d') = 1  
要设置标志,请执行以下操作:

SELECT 
    g.id, 
    COUNT(gp.userId) AS participantsCount,
    MAX(CASE WHEN participant.userId = '87b67168-0d7d-46c5-9437-29f996b3d85d' THEN 1 ELSE 0 END) AS isParticipant
FROM group g LEFT JOIN group_participant participant gp
ON gp.groupId = g.id
GROUP BY g.id
或者对于MySql:

MAX(participant.userId = '87b67168-0d7d-46c5-9437-29f996b3d85d') AS isParticipant

谢谢@forpas!它解决了这个问题。祝你度过愉快的一天。哦,我忘了提到:MySQL