如何在MySQL查询中统计相同age_from与age_to组合的出现次数?
解决MySQL统计age_from与age_to组合出现次数的问题
嘿,你的思路其实已经走对了大半!你已经找对了用GROUP BY分组统计相同组合的方向,现在只需要调整输出格式,就能得到你想要的结果啦。
最终可用的SQL语句
SELECT CONCAT(`p_age_from`, ' to ', `p_age_to`, ' = ', COUNT(*)) AS `age_range_count` FROM `user` GROUP BY `p_age_from`, `p_age_to` ORDER BY `p_age_from`, `p_age_to`;
语句细节解释
CONCAT()函数负责把多个内容拼接成你期望的格式:[起始年龄] to [结束年龄] = [出现次数],完美匹配你要的输出样式COUNT(*)用来统计每个分组的记录数,比单独统计某一列更稳妥(只要分组的两个字段非空,结果完全一致)GROUP BY p_age_from, p_age_to这部分你原来的写法完全正确,确保我们按两个字段的组合来分组统计ORDER BY可以按需调整,比如改成ORDER BY COUNT(*) DESC就能按出现次数从多到少排序
输出结果(和你的期望完全匹配)
age_range_count ------------------- 18 to 100 = 2 18 to 50 = 2 30 to 75 = 3
如果需要同时保留结构化的字段和格式化文本,也可以这么写:
SELECT `p_age_from`, `p_age_to`, COUNT(*) AS `user_count`, CONCAT(`p_age_from`, ' to ', `p_age_to`, ' = ', COUNT(*)) AS `formatted_result` FROM `user` GROUP BY `p_age_from`, `p_age_to` ORDER BY `p_age_from`;
这样既能拿到单独的年龄区间和数字,又能直接看到格式化好的文本,灵活度更高~
内容的提问来源于stack exchange,提问作者geoffc
相关产品推荐
相关产品推荐

