带条件计数和值分配的MySQL查询

时间:2019-07-18 15:09:06

标签: mysql

我有这个带有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分组。 谢谢。

1 个答案:

答案 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