mariadb 如何在分组查询中选择few或null

kb5ga3dv  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(160)

在包含用户配置文件的表中,有一列指定了用户所在的组,这一列被Map到另一个具有id形式的外键结构的表。
我想做的是用一个查询找出哪个组没有用户或哪个组的用户较少。
如果我们将下面的表想象为我的概要文件表

+------------+-----------------+
| id| uid   | user_group_labels|
+------------+-----------------+
| 1 | xxxxxxxx |    5051288    |
| 2 | yyyyyyyy |    5051288    |
| 3 | zzzzzzzz |    5051286    |
| 4 | aaaaaaaa |    5051286    |
| 5 | bbbbbbbb |    5051286    |

假设下面是我的用户组表

+---------------------------+
        |    id.  |user_group_name  |
        +---------------------------+
        | 5051288 |    xxxxxxxx     |
        | 5051286 |    yyyyyyyy     |
        | 4906315 |    zzzzzzzz     |

我期望的输出应该如下所示

+---------------------------+
        |    id.  |user_group_name  |
        +---------------------------+
        | 4906315 |    zzzzzzzz     |

因为ID为4906315的组未分配给任何用户,需要将其分配给用户。
不仅它们未被分配,而且如果没有ID为4906315的组,则ID为5051288的组应输出给我,因为它的分配比其他组少。
谢谢你的回答。

k2fxgqgv

k2fxgqgv1#

通过一个查询就可以找出哪个组没有用户或用户较少。

SELECT groups.group_name, COUNT(users.group_id) users_amount
FROM `groups`
LEFT JOIN users USING (group_id)
GROUP BY 1
HAVING users_amount <= @users_per_group
-- ORDER BY users_amount

其中,@users_per_group是“较少用户”条件的用户计数限制。
https://www.db-fiddle.com/f/5C5KepvRUjzpnw1wsqGHvd/0

相关问题