【问题标题】:SQL COUNT column where value is greater than value值大于值的 SQL COUNT 列
【发布时间】:2018-09-24 20:54:31
【问题描述】:

我有一个基本的选择查询,它正在查看我的表中的一些示例数据。我正在尝试获取三条信息。

  • 总样本(总记录)
  • 有多少分数大于或等于 85
  • 分数低于 85 分的人数

数据:

ScoreID RecordID    Score   ErrorMarkedToQID    ErrorActionID
1   2   30  Q00019  1
2   2   100 Q20039  3
3   3   30  Q10091  3
4   3   35  Q00019  5
6   4   5   Q10091  3

这是我尝试的:

DECLARE @startDate DATE = '2018/09/12', @endDate DATE = '2018/09/24'

SELECT COUNT(s.ScoreID) AS totalSamples,
       COUNT(CASE WHEN s.Score >= 85 THEN 1 ELSE 0 END) AS Pass,
       COUNT(CASE WHEN s.Score < 85 THEN 1 ELSE 0 END) AS Fail
  FROM [SubmissionScores] AS s
  JOIN Submission AS sub
  ON sub.SubmissionID = s.RecordID
  WHERE sub.DateSubmittedUTC BETWEEN @startDate AND @endDate

我当前的输出是所有字段都输出 5,这是记录的总数。所以看来我的CASE 逻辑不正确。

这可以像我尝试的那样在一个简单的查询中完成吗?

【问题讨论】:

  • 我想我刚刚意识到这些计数真的应该是SUM() :/ 有时只需要写出来让我明显地抓住它。
  • count(..),不包括else
  • @VamsiPrabhala 谢谢!没想到也可以这样。在这种情况下使用 SUM 与 COUNT 是否有对错?
  • @SBB 你重新发现了rubber duck!去sum
  • @SBB 如果这是一个 PEBKAC,请将解决方案作为答案发布并接受。

标签: sql tsql sql-server-2012


【解决方案1】:
DECLARE @startDate DATE = '2018/09/12', @endDate DATE = '2018/09/24'

SELECT COUNT(s.ScoreID) AS totalSamples,
       COUNT(CASE WHEN s.Score >= 85 THEN 1 ELSE NULL END) AS Pass,
       COUNT(CASE WHEN s.Score < 85 THEN 1 ELSE NULL END) AS Fail
  FROM [SubmissionScores] AS s
  JOIN Submission AS sub
  ON sub.SubmissionID = s.RecordID
  WHERE sub.DateSubmittedUTC BETWEEN @startDate AND @endDate

【讨论】:

    【解决方案2】:

    Count() 函数将返回匹配指定条件的行数,但您的 Case() 有匹配和不匹配的结果,因此它在所有情况下返回相同的(总)行数 使用 Case() 0 或 1 您可以使用 sum() 来总结案例的结果

     DECLARE @startDate DATE = '2018/09/12', @endDate DATE = '2018/09/24'
    
    SELECT COUNT(s.ScoreID) AS totalSamples,
           SUM(CASE WHEN s.Score >= 85 THEN 1 ELSE 0 END) AS Pass,
           SUM(CASE WHEN s.Score < 85 THEN 1 ELSE 0 END) AS Fail
      FROM [SubmissionScores] AS s
      JOIN Submission AS sub
      ON sub.SubmissionID = s.RecordID
      WHERE sub.DateSubmittedUTC BETWEEN @startDate AND @endDate
    

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 2021-11-24
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多