GROUP BY CASE的麻烦

时间:2010-08-16 05:48:49

标签: sql mysql group-by case

由于(Department_Code,Course_Code)行,以下查询给出错误“#1241 - 操作数应包含1列”。当我用just(Course_Code)替换它时,它可以工作。然而,这不是我想要的

SELECT * FROM Classes
GROUP BY CASE 
WHEN (1) THEN
 Department_Code
 ELSE CASE WHEN (2) THEN 
  (Department_Code, Course_Code)
 ELSE Class_ID
 END
END

如果满足条件(2),我如何按Department_Code,Course_Code进行分组?

2 个答案:

答案 0 :(得分:5)

case表达式只能返回单个值,因此您需要两个case表达式。此外,为每个表达式使用单个case表达式,而不是将两个嵌套在彼此内部:

SELECT * FROM Classes
GROUP BY
  CASE 
  WHEN (1) THEN
    Department_Code
  WHEN (2) THEN 
    Department_Code
  ELSE
    Class_ID
  END,
  CASE 
  WHEN (2) THEN 
    Course_Code
  ELSE
    1
  END

答案 1 :(得分:0)

遇到相同的问题,但是找到了一种更简单的方法,该方法是构造一个可以在GROUP BY中引用的帮助程序字段。 或者,您也可以执行相同的条件技巧,只要将字段合并即可将其放置在GROUP BY中。

SELECT *,

If( 'whatever field to check' = 2 , CONCAT(Department_Code,Course_Code), Course_Code) AS 'group1'

FROM Classes
GROUP BY group1