【发布时间】:2018-09-18 14:46:27
【问题描述】:
我可能忽略了一些简单的东西,但我没有看到它。
假设我有一个参与者和分数表
[Name] [Score]
Tom 12
Tom 14
Tom 20
Dick 14
Dick 17
Harry 23
我想向所有参加过一次以上的人展示他们的所有分数。这意味着在此示例中,我想显示除最后一条以外的所有记录。
第一部分很简单 - 只需按名称分组并添加 having count([Score])>1。但是如何也显示所有分数呢?
我尝试不分组并添加count([Score]) over (partition by [Name]),但这不是一个有效的过滤表达式。你不能这样做(count([Score]) over (partition by [Name]))>1。
所以最后我选择了
SELECT * from [Table]
where [Name] in (
SELECT [Name] from [Table]
GROUP by [Name]
HAVING count([Score])>1
)
这行得通,但我想知道是否有更好的方法。
(真正的查询更长,涉及更多的连接表,所有这些都必须在内部选择中重复,所以这感觉......很脏。违反了 DRY 原则。)
这是我能做的最好的吗?还是有更好的办法?
【问题讨论】:
标签: tsql group-by aggregate-functions