mysql group by并过滤每个分组记录中的值
我有一个按年龄分组的用户列表,但每个用户也有一个国籍,如果其中一个用户的国籍是我们,我希望该值在组记录中,目前它似乎取它找到的第一个国籍,我如何编写此查询 一种方法是:mysql group by并过滤每个分组记录中的值,mysql,Mysql,我有一个按年龄分组的用户列表,但每个用户也有一个国籍,如果其中一个用户的国籍是我们,我希望该值在组记录中,目前它似乎取它找到的第一个国籍,我如何编写此查询 一种方法是: SELECT *, IF(INSTR(GROUP_CONCAT('--', nationality, '--'), '--US--'), 'US', nationality) FROM table GROUP BY age; 它的作用是,GROUP_CONCAT将一个年龄段的所有国籍组合在一起,如果它
SELECT *, IF(INSTR(GROUP_CONCAT('--', nationality, '--'), '--US--'),
'US', nationality)
FROM table GROUP BY age;
它的作用是,GROUP_CONCAT将一个年龄段的所有国籍组合在一起,如果它在其中找到字符串“US”,它将返回“US”,否则它将像通常一样返回国籍。它还在国籍的开头和结尾加上“-”,使“我们”变成“我们”。如果您没有这样做,查询也会认为任何包含连续字符“US”的其他国籍都意味着我们。但这些“-”字符仅在内部使用,不会显示在最终结果中
编辑:我想到了另一个更干净但更长的方法:
SELECT * FROM (SELECT * FROM table WHERE nation='US'
UNION
SELECT * FROM table WHERE nation!='US') AS tmp
GROUP BY age;
因此,首先选择国籍为美国的人,然后选择国籍不是美国的人,并将这两组人组合起来,得到一张人员表,按顺序排列,首先是来自美国的人,然后是其他人。然后对该表执行分组操作,如果在该年龄段至少有一个人来自我们,您将始终获得我们的国籍,因为它将始终排在第一位。并为我们添加where子句?抱歉,我起初不理解您的问题,但现在我理解了。所以我编辑了我的答案