如何在GROUP BY分组COUNT为1的结果中返回对应Rol字段值
可以实现,有两种常见的实现方案:
方案1:聚合函数直接取值(单条语句无嵌套)
当HAVING COUNT(Rol) = 1的条件触发时,分组后的用户对应的Rol只有唯一值,直接用MAX()/MIN()聚合函数就能取出对应的Rol名称,不需要额外嵌套查询:
SELECT User, COUNT(Rol) AS RolCount, MAX(Rol) AS Rol FROM `table` GROUP BY User HAVING COUNT(Rol) = 1;
方案2:子查询关联原表(扩展性更强)
如果后续需要查询更多用户相关的字段,可以先通过子查询筛选出角色数为1的用户,再关联原表取对应的角色信息:
SELECT t.User, cnt.RolCount, t.Rol FROM `table` t INNER JOIN ( SELECT User, COUNT(Rol) AS RolCount FROM `table` GROUP BY User HAVING COUNT(Rol) = 1 ) cnt ON t.User = cnt.User;
注意说明
不能直接在原GROUP BY语句的SELECT后加未分组的Rol字段,在开启ONLY_FULL_GROUP_BY模式的数据库(如默认配置的MySQL 5.7及以上版本)中会直接报错,因为非分组、非聚合的字段不允许出现在GROUP BY查询的返回字段中。
内容的提问来源于stack exchange,提问作者tdslcs288
相关产品推荐
相关产品推荐

