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

如何在统计count时显示所有列?SQL查询技术咨询

解决查询显示所有列且筛选唯一rann值的问题

没问题,我帮你调整查询语句,既能保留所有列(givenname、surname、rann),又能只返回那些rann值在表中仅出现一次的行~

原查询的局限

你原来的查询用GROUP BY rann做了聚合,所以只能返回聚合后的统计数和rann本身,没办法获取givenname和surname这类非聚合列的数据。我们可以通过两种方式解决这个问题:


方法1:使用窗口函数(推荐,性能更优)

窗口函数可以在不改变行结构的前提下,给每一行计算对应rann的总出现次数,再筛选次数为1的行:

SELECT givenname, surname, rann
FROM (
    SELECT 
        givenname, surname, rann,
        -- 计算每个rann的出现次数,不改变原表行结构
        COUNT(*) OVER(PARTITION BY rann) AS rann_count
    FROM ##test
) AS sub_query
WHERE rann_count = 1
ORDER BY rann_count DESC;

方法2:子查询关联统计结果

先通过子查询统计出所有出现次数为1的rann,再关联原表获取完整列数据:

SELECT t.givenname, t.surname, t.rann
FROM ##test t
INNER JOIN (
    -- 先拿到出现次数为1的rann列表
    SELECT rann, COUNT(*) AS coun
    FROM ##test
    GROUP BY rann
    HAVING COUNT(*) = 1
) AS agg ON t.rann = agg.rann
ORDER BY agg.coun DESC;

最终结果

两种方法都会返回你期望的结果:

givenname | surname | rann
----------|---------|-----
Anne      | Bauer   | m1
Thomas    | Neben   | m3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:41:35