MySQL查询组参与者计数和IF isParticipant语句
我有一个MySQL查询的问题,我无法解决它 初步情况如下: 我有一个包含用户的表和一个包含组的表。这两个表都由一个多通(组参与者)表连接 以下查询工作正常: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
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