Sql 分组讨论的问题

Sql 分组讨论的问题,sql,mysql,group-by,case,Sql,Mysql,Group By,Case,由于(部门代码、课程代码)行,以下查询给出错误“#1241-操作数应包含1列”。当我用(课程代码)替换它时,它就工作了。然而,这不是我想要的 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)满足时,如何按部门代码、课程代码分组?Ac

由于(部门代码、课程代码)行,以下查询给出错误“#1241-操作数应包含1列”。当我用(课程代码)替换它时,它就工作了。然而,这不是我想要的

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)满足时,如何按部门代码、课程代码分组?

Acase表达式只能返回一个值,因此需要两个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

有同样的问题,但找到了一种更简单的方法,即构造一个helper字段,然后可以在GROUP BY中引用该字段。 或者你也可以做同样的条件技巧,把它放在组中,只要你在字段中保持一致

SELECT *,

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

FROM Classes
GROUP BY group1