我有这样的SQL表:
TABLE1
STUDENT SCORE SCOREVAL
1 PASS 10
1 MOD1 4
1 MOD2 5
2 MOD1 4
3 MOD2 2
3 MOD2 1
3 MOD1 9
3 ER 1
4 MOD2 10
4 ER 6
字符串
我想把表格简化成这样
STUDENT SCORE
STUDENT SCORE SCOREVAL
1 PASS 10
2 MOD1 4
3 PASS 11
4 MOD2 10
型
使用规则
For each STUDENT
if any value of **SCORE** equals to PASS, then is PASS
if contains value MOD1 and MOD2, then is PASS
if contains value MOD1, then is MOD1
if contains value MOD2, then is MOD2
型
然后对于评分,
if any value of SCORE equals to PASS, then take MAX(SCOREVAL[SCORE = PASS])
if contains value MOD1 and MOD2, then take MAX(SCOREVAL[SCORE = MOD1] + MAX(SCOREVAL[SCORE=MOD2])
if contains value MOD1, then take MAX(SCOREVAL[SCORE = MOD1])
if contains value MOD2, then take MAX(SCOREVAL[SCORE = MOD2])
型
我试试这个:
SELECT *
FROM TABLE1
GROUP BY STUDENT when SCORE = 'PASS' then 'PASS'
when SCORE = 'MOD1' and SCORE = 'MOD2' then 'PASS'
when SCORE = 'MOD1' then 'MOD1'
when SCORE = 'MOD2' then 'MOD2'
else EXEMPT
end
型
没有成功
2条答案
按热度按时间l5tcr1uw1#
我修改了代码,SQL查询将数据按
STUDENT
分组,然后根据特定条件使用CASE
语句和聚合函数(如MAX()
)确定每个学生的最终SCORE
和SCOREVAL
。字符串
ukdjmx9f2#
假设您不希望在结果集的
SCOREVAL
列中出现NULL
值,则可以合并一些规则并将其他规则构建到分数计算中。例如,如果没有
PASS
条目,则可以无条件地对MOD1
和MOD2
条目的相对最大分数求和。将任何缺失值合并到0
,以防止NULL
值干扰另一个有效条目。Schema(MySQL v8.0)
字符串
查询#1
型
| 学生|评分|评分|
| --|--|--|
| 1 |通过| 10 |
| 2 |Mod1| 4 |
| 3 |通过| 11 |
| 4 |MOD2| 10 |
| 5 |豁免| 0 |
| 6 |通过| 13 |
View on DB Fiddle