【发布时间】: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