按组计算SQL去重计数

6

在这个问题中,我的表格有三列:球员,球队和比赛日期。

Player         Team         Date_Played
John Smith     New York     2/25/2014
Joe Smith      New York     2/25/2014
Steve Johnson  New York     2/25/2014
Steph Curry    Orlando      2/25/2014
Frank Anthony  Orlando      2/26/2014
Brian Smith    New York     2/26/2014
Steve Johnson  New York     2/27/2014
Steph Curry    New York     2/28/2014

我知道如何获取不同球队名称或比赛日期的列表,但我要找的是一个查询,它将按团队分组,并计算不同团队和日期组合的数量。因此,输出应该像这样:

Team          Count
New York      4
Orlando       2

目前为止,我已经:

SELECT DISTINCT Tm, Count(Date_Played) AS Count
FROM NBAGameLog
GROUP BY NBAGameLog.[Tm];

但这样会给我按日期分组的总记录数。
3个回答

10
一点儿代码量减少:
SELECT Team, Count(distinct Date_Played) AS Count 
FROM NBAGameLog 
GROUP BY Team

它展示的执行计划与第一个答案相同。

4

这个查询已在Access 2010中进行了测试:

SELECT Team, Count(Date_Played) AS Count
FROM
    (
        SELECT DISTINCT Team, Date_Played
        FROM NBAGameLog
    ) AS whatever
GROUP BY Team

2
如果我理解正确的话,您需要像这样的查询:
SELECT x.Team, count(*)
FROM 
    (SELECT Team, Date_Played
     FROM NBAGameLog
     GROUP BY Team, Date_Played) AS x
GROUP BY x.Team

Access提示:“您尝试执行一个查询,该查询不包括指定的表达式'Count'作为聚合函数的一部分。” - Gord Thompson
这实际上给了我最初的相同结果。我基本上是在寻找每个团队比赛天数的数量。因此,在上面的例子中,纽约队参加了4个不同的比赛日。 - fullOfQuestions
您的查询是正确的,除了字段名应该是Team而不是Tm - Gord Thompson
哈哈,我把它命名为Tm,因为他也把它命名为Tm,但我认为这很清楚。感谢您的评论,我会进行更正的 ;) - carexcer
记录一下,字段的拼写并不是问题所在。当我第一次运行你的答案时,它给出了与我的原始查询相同的结果。但你更新后的答案也可以运行...无论如何,非常感谢你们两个。 - fullOfQuestions
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接