首页 > 解决方案 > 为什么 group by 和 count 命令返回这样的结果?

问题描述

speed ram model
500    64   1
500   64    2
500   32    3
900   128   4
600   128   5
700   32    6
700   64    7

select speed,ram from rrr  group by speed,ram having count(speed)>1

结果 :

speed  ram
500    64

为什么会这样?但我希望得到以下结果:

speed  ram
500    32
500    64
700     32
700     64 

因为有三个500,两个700记录谁能解释一下?

标签: sql-servergroup-bycount

解决方案


group by speed,ram 创建以下组

speed  ram
------------
500    64   
500    32    
900    128   
600    128   
700    32    
700    64    

count从句的功能having适用于整个组。因此,如果您写count(speed),count(*)count(ram). 它们都返回相同的值。

看这个演示

人口大于 1 的唯一组是500, 64,因此您得到的结果。

您可以使用窗口函数实现预期结果:

SELECT DISTINCT speed, ram
FROM (
   SELECT speed, ram, COUNT(*) OVER (PARTITION BY speed) AS cnt
   FROM mytable) t
WHERE t.cnt > 1

请注意PARTITION BY窗口函数的子句:它仅按speed.

演示在这里


推荐阅读