SQL 将多行视为 1 进行分组
SQL group by considering multiple rows as 1
假设我有以下 table(课程)
course-------score
A---------------4
B---------------6
C---------------3
A---------------2
B---------------4
C---------------4
现在,如果我想获得每门课程的平均值、最小值和最大值,我将使用以下
SELECT course, AVG(score),MIN(score),Max(score) FROM [courses]
GROUP BY course
但是如果我想将课程 A 和 B 都视为 A 怎么办
所以我应该得到以下
Course-------Average-------Min-------Max
A---------------4----------2-----------6
C--------------3.5---------3-----------4
你的例子似乎表明你的问题有误 - 我假设你的意思是 "If I want to consider A and C as A"
在这种情况下,您应该可以在 GROUP BY
中执行此操作
GROUP BY
CASE WHEN Course = 'C' THEN 'A' ELSE Course END
如果这不起作用,那么您可以嵌套查询:
SELECT
ModifiedCourses.Course,
AVG(ModifiedCourses.score),
MIN(ModifiedCourses.score),
Max(ModifiedCourses.score)
FROM (
SELECT
CASE WHEN Course = 'C' THEN 'A' ELSE Course END AS Course,
Score
FROM
Courses) AS ModifiedCourses
GROUP BY
ModifiedCourses.Course
假设我有以下 table(课程)
course-------score
A---------------4
B---------------6
C---------------3
A---------------2
B---------------4
C---------------4
现在,如果我想获得每门课程的平均值、最小值和最大值,我将使用以下
SELECT course, AVG(score),MIN(score),Max(score) FROM [courses]
GROUP BY course
但是如果我想将课程 A 和 B 都视为 A 怎么办 所以我应该得到以下
Course-------Average-------Min-------Max
A---------------4----------2-----------6
C--------------3.5---------3-----------4
你的例子似乎表明你的问题有误 - 我假设你的意思是 "If I want to consider A and C as A"
在这种情况下,您应该可以在 GROUP BY
GROUP BY
CASE WHEN Course = 'C' THEN 'A' ELSE Course END
如果这不起作用,那么您可以嵌套查询:
SELECT
ModifiedCourses.Course,
AVG(ModifiedCourses.score),
MIN(ModifiedCourses.score),
Max(ModifiedCourses.score)
FROM (
SELECT
CASE WHEN Course = 'C' THEN 'A' ELSE Course END AS Course,
Score
FROM
Courses) AS ModifiedCourses
GROUP BY
ModifiedCourses.Course