【问题标题】:How to retrieve count of records in SELECT statement如何检索 SELECT 语句中的记录数
【发布时间】:2015-07-02 18:01:24
【问题描述】:

我正在尝试检索正确的记录数以缓解我遇到的问题。以下查询从我的数据库中返回 327 条记录:

 SELECT DISTINCT COUNT(at.someid) AS CountOfStudentsInTable FROM tblJobSkillAssessment AS at 
                INNER JOIN tblJobSkills j ON j.jobskillid = at.skillid
                LEFT JOIN tblStudentPersonal sp ON sp.someid2 = at.someid
                INNER JOIN tblStudentSchool ss ON ss.monsterid = at.someid
                INNER JOIN tblSchools s ON s.schoolid = ss.schoolid
                INNER JOIN tblSchoolDistricts sd ON sd.schoolid = s.schoolid
                INNER JOIN tblDistricts d ON d.districtid = sd.districtid
                INNER JOIN tblCountySchools cs ON cs.schoolid = s.schoolid
                INNER JOIN tblCounties cty ON cty.countyid = cs.countyid
                INNER JOIN tblRegionUserRegionGroups rurg ON rurg.districtid = d.districtid
                INNER JOIN tblGroups g ON g.groupid = rurg.groupid
                WHERE ss.graduationyear IN (SELECT Items FROM FN_Split(@gradyears, ',')) AND sp.optin = 'Yes' AND g.groupname = @groupname

我遇到麻烦的地方是尝试将其与以下查询相协调。一个是只显示所有特定学生的计数,另一个是根据需要显示一组学生的相关信息,但总数需要相同,但事实并非如此。下面的查询返回 333 个学生 - 原因是学生去的学校位于两个不同的县,并且该学生计算了两次。我不知道如何解决这个问题。

 SELECT DISTINCT @TableName AS TableName, d.district AS LocationName, cty.county AS County, COUNT(DISTINCT cc.monsterid) AS CountOfStudents, d.IRN AS IRN FROM tblJobSkillAssessment AS cc
            INNER JOIN tblJobSkills AS c ON c.jobskillid = cc.skillid
            INNER JOIN tblStudentPersonal sp ON sp.monsterid = cc.monsterid
            INNER JOIN tblStudentSchool ss ON ss.monsterid = cc.monsterid
            INNER JOIN tblSchools s ON s.schoolid = ss.schoolid
            INNER JOIN tblSchoolDistricts sd ON sd.schoolid = s.schoolid
            INNER JOIN tblDistricts d ON d.districtid = sd.districtid
            INNER JOIN tblCountySchools cs ON cs.schoolid = s.schoolid
            INNER JOIN tblCounties cty ON cty.countyid = cs.countyid
            INNER JOIN tblRegionUserRegionGroups rurg ON rurg.districtid = d.districtid
            INNER JOIN tblGroups g ON g.groupid = rurg.groupid
            WHERE ss.graduationyear IN (SELECT Items FROM FN_Split(@gradyears, ',')) AND sp.optin = 'Yes' AND g.groupname = @groupname
            GROUP BY cty.county, d.IRN, d.district
            ORDER BY LocationName ASC

【问题讨论】:

  • 你想如何对待两个县的学生?他们应该是任意一个县的成员,还是有某种“主要”称号?
  • 改用count(distinct at.someID)?假设 at.SomeID 由于两个不同的国家而被列出两次。将 distinct 添加到计数时,它仅查看正在计数的列值。在开头应用时,它适用于记录的所有值。

标签: sql sql-server join


【解决方案1】:

如果你只想要计数,那么count(distinct) 可能会解决问题:

select count(distinct at.someid)

我看不出at.someid 指的是什么,所以也许:

select count(distinct cc.monsterid)

【讨论】:

  • 不同的甚至不是必需的,你只需要依靠学生表(你会重新连接所有的连接吗?),你可以保证只有一行/学生(如果不是,你的数据没有很好地保存) “乘法”是由连接完成的
  • @jean 。 . .由于where 子句,一些连接是必要的,但似乎并非全部都是。
猜你喜欢
  • 2011-12-31
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多