我有这个带有ID,成绩的样本表:
Id Grades
1 50
1 60
1 70
1 40
1 80
1 65
2 80
2 67
2 100
2 90
2 60
etc
我想在这里做的是一步一步来:
像这样将它们分组:
Between Assigned
1-50 D
51-70 C
71-90 B
91-100 A
,如果这些组的数量> = 2,则为每个组分配上面指定的值:
if count(1-50)>=2 then D
if count(51-70)>=2 then C
if count(71-90)>=2 then B
if count(91-100)>=2 then A
,因此输出将为A,B,C,D or ""
。 按ID分组。
谢谢。
答案 0 :(得分:1)
尝试此查询:
SELECT a.id, COALESCE(MAX(CASE
WHEN a.rank='D' AND a.cnt>=2 THEN 'D'
WHEN a.rank='C' AND a.cnt>=2 THEN 'C'
WHEN a.rank='B' AND a.cnt>=2 THEN 'B'
WHEN a.rank='A' AND a.cnt>=2 THEN 'A'
ELSE NULL
END),'') AS `rank`
FROM (
SELECT t.id,r.`rank`,COUNT(*) AS cnt
FROM (
SELECT 1 AS low, 50 AS high, 'D' AS `rank`
UNION ALL
SELECT 51,70,'C'
UNION ALL
SELECT 71,90,'B'
UNION ALL
SELECT 91,100,'A') r
INNER JOIN t t
ON t.grades>=r.low
AND t.grades<=r.high
GROUP BY t.id,r.`rank`) a
GROUP BY a.id