SQL Server:以列值为条件的不同聚合函数[重复]
Posted
技术标签:
【中文标题】SQL Server:以列值为条件的不同聚合函数[重复]【英文标题】:SQL Server : different aggregate functions conditional on column values [duplicate] 【发布时间】:2019-04-28 14:22:07 【问题描述】:我有一张这样的表格(大大简化了):
|student_id|Courses| grades |
+----------+-------+--------+
| 001 | Math | 95 |
| 001 | Math | 83 |
| 001 | Others| 33 |
| 002 | Math | 92 |
| 002 | Others| 12 |
| 002 | Others| 72 |
我想要什么:
-
“数学”计数
“其他”的最小值
按 student_id 分组
期望的结果:
|student_id|Num_math|min_others|
+----------+--------+----------+
| 001 | 2 | 33 |
| 002 | 1 | 12 |
【问题讨论】:
提示:GROUP BY
、COUNT()
、CASE
。
或者,this one,但想法是一样的。
【参考方案1】:
使用GROUP BY student_id
和条件SUM
和MIN
:
SELECT
student_id,
SUM(CASE Courses WHEN 'Math' THEN 1 ELSE 0 END) AS Num_math,
MIN(CASE Courses WHEN 'Others' THEN grades ELSE NULL END) AS min_others
FROM tablename
GROUP BY student_id
【讨论】:
【参考方案2】:就像 Gordon 说的,你需要使用GROUP BY
、COUNT()
、CASE
AND MIN
。这就是你想要的:
SELECT student_id
,COUNT(CASE WHEN Courses='Math' THEN grades ELSE NULL END) Math
,MIN(CASE WHEN Courses='Others' THEN grades ELSE NULL END) Others
FROM Student
GROUP BY student_id
【讨论】:
第一个必须是sum
。 0 仍然是一个值,将被count
计数。
你是对的,用 null 求和或计数都可以。我已经更新了。感谢您的仔细检查。以上是关于SQL Server:以列值为条件的不同聚合函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章