You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL表中查询使用频次最高与最低值的问题

嘿,我完全懂你现在的困扰——把分散在两列里的站点值合并后,没法正确统计并按出现频次排序对吧?别慌,咱们一步步拆解解决这个问题:

第一步:先把两列数据完整合并(关键!别丢重复值)

首先得把两个站点列的所有值合并成一个数据集,这里一定要用UNION ALL而不是UNION!因为UNION会自动去重,直接就丢了频次统计需要的重复数据。假设你的票务表叫ticket_table,两个站点列是site_a和site_b,那合并语句可以这么写:

SELECT site_a AS site_value FROM ticket_table
UNION ALL
SELECT site_b AS site_value FROM ticket_table

这一步会输出所有站点值的完整列表,包括每一次出现的重复项,不会漏掉任何频次信息。

第二步:统计每个站点的出现次数

把上面的合并结果作为子查询,用GROUP BY和COUNT()来统计每个站点的频次:

SELECT site_value, COUNT(*) AS occurrence_count
FROM (
    SELECT site_a AS site_value FROM ticket_table
    UNION ALL
    SELECT site_b AS site_value FROM ticket_table
) AS combined_sites
GROUP BY site_value

到这里你就能得到每个站点对应的准确出现次数了,比如你说的2000会显示4次,2001显示1次。

第三步:按频次排序,精准定位最高/最低值

现在只需要加ORDER BY就能按频次排序,再用LIMIT锁定目标:

  • 找频次最高的站点(比如你的2000):
SELECT site_value, COUNT(*) AS occurrence_count
FROM (
    SELECT site_a AS site_value FROM ticket_table
    UNION ALL
    SELECT site_b AS site_value FROM ticket_table
) AS combined_sites
GROUP BY site_value
ORDER BY occurrence_count DESC
LIMIT 1;
  • 找频次最低的站点(比如你的2001):
SELECT site_value, COUNT(*) AS occurrence_count
FROM (
    SELECT site_a AS site_value FROM ticket_table
    UNION ALL
    SELECT site_b AS site_value FROM ticket_table
) AS combined_sites
GROUP BY site_value
ORDER BY occurrence_count ASC
LIMIT 1;

如果有多个站点频次相同(比如多个都只出现1次),去掉LIMIT 1就能看到所有符合条件的站点。

避坑提醒

  • 绝对别用UNION代替UNION ALL!这是最容易踩的坑,UNION会合并重复行,直接导致统计的频次比实际少,大概率是你之前排序出错的原因。
  • 确保两列数据类型一致,如果一列是数字一列是字符串,合并后可能会统计异常,必要时用CAST()统一类型,比如CAST(site_a AS CHAR) AS site_value。

内容的提问来源于stack exchange,提问作者user8795980

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:05:25