如何在统计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
相关产品推荐
相关产品推荐

