sql-server - 为什么 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记录谁能解释一下?
解决方案
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
.
推荐阅读
- jquery - 第二次单击第一个数据表行隐藏第二个数据表的表头
- database - 我是否将 SQLite 数据库中的时间/日期存储为 unix 或其他东西?
- jquery - html弹出模式打开时如何使背景模糊?
- python - Couldn't install textract in google colab
- r - 将 Sys.time() 转换为数字并附加到字符串
- azure - 使用 Powershell 脚本生成 Azure Databricks 令牌
- mysql - MySQL,InnoDB中自增索引的结构
- javascript - 在 ext.net 中重新加载存储时,网格中的记录焦点丢失
- excel - 从特定文件夹子文件夹重命名特定工作表
- tensorflow - 如何将 TensorFlow SavedModel 图转换为 Caffe 模型?