不适用于 mysql 中计算列的函数分组
Does not work group by function with calculated column in mysql
我正在尝试使用聚合案例来创建数据透视表 table。但是,对于我创建的表示行号的列,它显示错误
Code: 1056. Can't group on 'rn'.
与此同时,如果我手动执行相同的工作(通过将 id 列添加到我的 table 它工作正常)。
代码如下:
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;
在此先感谢您的帮助!
您需要一个子查询来先填充 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
我正在尝试使用聚合案例来创建数据透视表 table。但是,对于我创建的表示行号的列,它显示错误
Code: 1056. Can't group on 'rn'.
与此同时,如果我手动执行相同的工作(通过将 id 列添加到我的 table 它工作正常)。
代码如下:
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;
在此先感谢您的帮助!
您需要一个子查询来先填充 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