mysql - 从 2 个表中获取数据 - 一次有计数,一次没有

标签 mysql sql left-join

我有组 table

编号 |组名

然后是用户(这里不重要)

编号 |用户名

然后映射map-group-user

编号 |群组编号 |用户ID

第一步我想知道每个组中有多少用户......

SELECT             
g.groupName as name,  count(DISTINCT m.groupId, m.userId) as totalCount             
FROM group g             
LEFT JOIN map-group-user m ON ( g.id = m.groupId)              
GROUP BY g.id             

这有效...我的结果是:

名字 |总数

组1 | 34

组2 | 23

组3 | 11

现在我想在相同的结果中添加另一列...我想知道特定用户(比如说 userId = 1)是否被添加到这个特定的组(所以不仅要计算有多少用户加入了该组,还要知道我的用户属于哪个组) 所以在同一个查询中,我想检查 map-group-user 中是否有我的 userId (1) 的每个组的条目

所以我想要这样的结果:

名字 |总数 |我的用户

组1 | 34 | 1

组2 | 23 | 0

组3 | 11 | 1

所以 myUser = 1 他已经在组中了...

我希望我的解释很清楚:)

感谢您的帮助

最佳答案

将此添加为您选择的列:

CASE
    WHEN m.userId = 541 THEN 1
    ELSE 0
END as myUser

在我的示例中,您的用户 ID 是 541。所以像这样:

SELECT g.groupName as name
       , count(DISTINCT m.groupId, m.userId) as totalCount             
       , sum(CASE
            WHEN m.userId = 541 THEN 1
            ELSE 0
         END) as myUser
FROM `group` as g             
LEFT JOIN `map-group-user` as m ON (g.id = m.groupId)              
GROUP BY g.groupName   

这是 DEMO

关于mysql - 从 2 个表中获取数据 - 一次有计数,一次没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58650278/

相关文章:

sql - MS Access 2007 sql函数?

mysql - 如何优化这个sqlrq?合适吗?怎样做比较好?

mysql - 为什么sql给出的结果不正确?

mysql - 我应该使用关系还是分割结果

php - 如何设置发送邮件的时间间隔?

sql - 在 SQL Server Management Studio 中将存储过程作为作业运行

sql - CI Server中安装DB Server是否错误

php - MySQL 查找连接 3 个表

在 Applet 中执行操作后 Java JDBC 连接丢失

php - MySQL 日期转换