SQL从查询填充新表
大家好,我真的是sql新手,所以如果这听起来很愚蠢,我很抱歉 我有一个查询,显示了两个表中的所有女性驱动程序(employee和role每个表总共有1000行) 员工表SQL从查询填充新表,sql,mysql-workbench,Sql,Mysql Workbench,大家好,我真的是sql新手,所以如果这听起来很愚蠢,我很抱歉 我有一个查询,显示了两个表中的所有女性驱动程序(employee和role每个表总共有1000行) 员工表 1 Brendon Hayford Male 2 Appolonia Mawer Female 3 Stanly Loachhead Male 4 Kinny Hulcoop Male 5 Alyssa Vose Fe
1 Brendon Hayford Male
2 Appolonia Mawer Female
3 Stanly Loachhead Male
4 Kinny Hulcoop Male
5 Alyssa Vose Female
6 Gerrie Cradey Female
7 Katalin Coverly Female
8 Michelina Yukhov Female
9 Abbey Thunnerclif Male
10 Skippy Juett Male
11 Kizzee Bleythin Female
12 Shea Coxhell Male
13 Win Shilstone Male
14 Carita Giddy Female
15 Tiebout Creffield Male
1 Mechanic
2 Admin
3 Mechanic
4 Admin
5 Admin
6 Mechanic
7 Driver
8 Mechanic
9 Admin
10 Driver
11 Admin
12 Driver
13 Admin
14 Mechanic
15 Mechanic
角色表
1 Brendon Hayford Male
2 Appolonia Mawer Female
3 Stanly Loachhead Male
4 Kinny Hulcoop Male
5 Alyssa Vose Female
6 Gerrie Cradey Female
7 Katalin Coverly Female
8 Michelina Yukhov Female
9 Abbey Thunnerclif Male
10 Skippy Juett Male
11 Kizzee Bleythin Female
12 Shea Coxhell Male
13 Win Shilstone Male
14 Carita Giddy Female
15 Tiebout Creffield Male
1 Mechanic
2 Admin
3 Mechanic
4 Admin
5 Admin
6 Mechanic
7 Driver
8 Mechanic
9 Admin
10 Driver
11 Admin
12 Driver
13 Admin
14 Mechanic
15 Mechanic
查询
SELECT role.idrole, employee.*, role.role
FROM employee
INNER JOIN role
ON idrole=idemployee
WHERE role.role="Driver"
AND employee.gender="Female";
此查询返回161行女性驱动程序
7 7 Katalin Coverly Female Driver
26 26 Jenilee Soeiro Female Driver
34 34 Rachel Tourner Female Driver
46 46 Joanne McCallister Female Driver
47 47 Maure Wingrove Female Driver
63 63 Bettina Mattecot Female Driver
74 74 Nelle MacRierie Female Driver
77 77 Elsinore Milius Female Driver
80 80 Emalia Hellewell Female Driver
82 82 Kerianne Pirkis Female Driver
95 95 Teena Pesak Female Driver
99 99 Harriot Seyffert Female Driver
我需要一种方法将此查询中的每2名女性驾驶员分配给一个团队(例如,第1行和第2行在团队a、第3行和第4行团队B中,以此类推)
任何信息或建议都将不胜感激。如果您在您的工作台版本中运行MySQL 8,那么您可以使用
行号()
生成一个团队号,将行号除以2,将两个人分配给一个团队:
SELECT r.role, e.*,
(ROW_NUMBER() OVER (ORDER BY idemployee) + 1) DIV 2 AS Team
FROM employee e
JOIN role r ON r.id = e.idrole
WHERE r.role = 'Driver' AND e.gender = 'Female'
输出(基于问题中的数据):
请注意,在我的演示中,我使用id
和role
列对您的role
表进行了适当的规范化修改;并在employee表中使用外键(idrole
)来引用角色
表中的id
。所以role
看起来是这样的:
id role
1 Mechanic
2 Admin
3 Driver
SET @var=64;
SELECT field1, ...,
CONCAT('Team-', CHAR(ROUND(@var:=@var+.5))) AS Team
FROM table_name;
从上面的输出可以看出,所有驱动程序都有
idrole=3
如果您在工作台版本中运行MySQL 8,那么您可以使用ROW_NUMBER()
生成一个团队编号,将行编号除以2,为一个团队分配两个人:
SELECT r.role, e.*,
(ROW_NUMBER() OVER (ORDER BY idemployee) + 1) DIV 2 AS Team
FROM employee e
JOIN role r ON r.id = e.idrole
WHERE r.role = 'Driver' AND e.gender = 'Female'
输出(基于问题中的数据):
请注意,在我的演示中,我使用id
和role
列对您的role
表进行了适当的规范化修改;并在employee表中使用外键(idrole
)来引用角色
表中的id
。所以role
看起来是这样的:
id role
1 Mechanic
2 Admin
3 Driver
SET @var=64;
SELECT field1, ...,
CONCAT('Team-', CHAR(ROUND(@var:=@var+.5))) AS Team
FROM table_name;
从上面的输出可以看出,所有驱动程序都有
idrole=3
您只需设置一个变量并向SELECT语句中添加一个计算即可。大概是这样的:
id role
1 Mechanic
2 Admin
3 Driver
SET @var=64;
SELECT field1, ...,
CONCAT('Team-', CHAR(ROUND(@var:=@var+.5))) AS Team
FROM table_name;
您只需设置一个变量并向SELECT语句中添加一个计算,就可以做到这一点。大概是这样的:
id role
1 Mechanic
2 Admin
3 Driver
SET @var=64;
SELECT field1, ...,
CONCAT('Team-', CHAR(ROUND(@var:=@var+.5))) AS Team
FROM table_name;
请分享一些示例数据和预期输出(格式文本)。@Honeybager Hi我已经编辑了原始问题。任何两个驱动程序是否可以在任何团队/随机选择中,或者是按照驱动程序的顺序,还是需要将驱动程序分配给特定的团队?如果该查询是真的,我认为您的设计有问题。为什么
idrole=ideemployee
?我希望表role
中有一行role='Driver'
,所有作为驱动程序的员工都指向该记录。@Felix是的,一个团队只需要两名女性驱动程序,驱动程序可以更改团队,但任何团队都必须有两名女性驱动程序请共享一些示例数据和预期输出(格式文本)@HoneyBadger Hi我已经编辑了原始问题。任何2名驾驶员是否可以在任何团队/随机选择中,或者是按照驾驶员的顺序,还是需要将驾驶员分配到特定的团队?如果该查询是真的,我认为您的设计中存在错误。为什么idrole=ideemployee
?我希望表role
中有一行role='Driver'
,并且所有作为驱动程序的员工都指向该记录。@Felix是的,一个团队只需要两名女性驱动程序,驱动程序可以更换团队,但任何团队都必须有两名女性驱动程序