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

如何在MySQL中使用子查询获取所有唯一名称及其出现次数?

问题分析与解决方案

你的这个思路其实是不对的,咱们来拆解下问题出在哪,再看看正确的做法~

为什么你的查询得不到想要的结果?

你写的子查询 (select count(distinct(etunimi)) as määrä from jasenet) 是在全局统计整个表中有多少种不同的名字,所以不管哪一行的 etunimi 是什么,对应的 määrä 都会是同一个总数,自然没法得到每个名称各自的出现次数。

正确的实现方法

要统计每个唯一名称的出现次数,最标准也最高效的做法是用 GROUP BY 子句,它会把相同 etunimi 的行归为一组,然后用聚合函数统计每组的数量:

SELECT etunimi, COUNT(*) AS määrä
FROM jasenet
GROUP BY etunimi;

语句解释:

  • GROUP BY etunimi:将表中所有行按照 etunimi 的值分组,相同名字的行被分到同一组
  • COUNT(*):统计每组内的行数,也就是该名称的出现次数

如果你的 etunimi 字段可能存在 NULL 值,并且你不想统计这些 NULL 的话,可以加个过滤条件:

SELECT etunimi, COUNT(*) AS määrä
FROM jasenet
WHERE etunimi IS NOT NULL
GROUP BY etunimi;

额外实用技巧

  • 如果想按出现次数从多到少排序,可以追加 ORDER BY 子句:
    SELECT etunimi, COUNT(*) AS määrä
    FROM jasenet
    GROUP BY etunimi
    ORDER BY määrä DESC;
    
  • 如果只想筛选出现次数大于某个值的名称(比如至少出现2次),可以用 HAVING 子句(注意:HAVING 是在分组后过滤结果,不能用 WHERE):
    SELECT etunimi, COUNT(*) AS määrä
    FROM jasenet
    GROUP BY etunimi
    HAVING COUNT(*) > 2
    ORDER BY määrä DESC;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:41:51