不能按功能分组与 mysql 中的计算列

时间:2021-06-04 18:17:18

标签: mysql group-by case aggregate

我正在尝试使用聚合案例来创建数据透视表。但是,对于我创建的列来表示行号,它显示了一个错误

<块引用>

代码:1056。无法在“rn”上分组。

与此同时,如果我手动执行相同的工作(通过将 id 列添加到我的表中,它可以正常工作)。

代码如下:

CREATE TABLE employee (name varchar(128), occupation varchar(128));
INSERT INTO employee VALUES
('Sandra','Gydytoja'),
('Julija','Aktorė'),
('Marija','Aktorė'),
('Martyna','Vadybininkė'),
('Aistė','Mokytoja'),
('Kristina','Mokytoja'),
('Virginija','Mokytoja'),
('Jurga','Aktorė'),
('Justina','Gydytoja'),
('Mia','Vadybininkė');

SELECT ROW_NUMBER() OVER (PARTITION BY occupation ORDER BY name asc) AS rn,
MAX(case when occupation = "Gydytoja" then name end) AS Gydytoja,
MAX(case when occupation = "Aktorė" then name end) AS Aktorė,
MAX(case when occupation = "Vadybininkė" then name end) AS Vadybininkė,
MAX(case when occupation = "Mokytoja" then name end) AS Mokytoja
FROM employee
GROUP BY rn;

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您首先需要一个子查询来填充 rn ,然后您可以使用它:

<块引用>
SELECT rn,
MAX(case when occupation = "Gydytoja" then name end) AS Gydytoja,
MAX(case when occupation = "Aktorė" then name end) AS Aktorė,
MAX(case when occupation = "Vadybininkė" then name end) AS Vadybininkė,
MAX(case when occupation = "Mokytoja" then name end) AS Mokytoja
from ( 
select * , ROW_NUMBER() OVER (PARTITION BY occupation ORDER BY name asc) AS rn
FROM employee
) t 
GROUP BY rn;
rn | Gydytoja | Aktorė | Vadybininkė | Mokytoja 
-: | :------- | :------ | :----------- | :--------
 1 | Justina  | Julija  | Martyna      | Aistė   
 2 | Sandra   | Jurga   | Mia          | Kristina 
 3 | null     | Marija  | null         | Virginija

db<>fiddle here

相关问题