gpt4 book ai didi

mysql - 将针对一张表的多个查询合并到一个结果集的多个字段中

转载 作者:行者123 更新时间:2023-11-29 14:26:10 36 4
gpt4 key购买 nike

答案:这是根据 @Michael 的答案构建的最终查询:

SELECT 
Emp_ID,
MAX(CASE WHEN Skill_ID = 'WLN' THEN (Rating > 0) END) AS `WLN`,
MAX(CASE WHEN Skill_ID = 'LOC' THEN (Rating > 0) END) AS `LOC`,
MAX(CASE WHEN Skill_ID = 'BRV' THEN (Rating > 0) END) AS `BRV`,
AVG(CASE WHEN Skill_ID IN ('KWH','SIC','DOL') THEN (Rating) END) > 0 AS `KSD`
FROM Emp_Skill
WHERE Emp_ID IN (120,348,361,370)
GROUP BY Emp_ID
<小时/>

问题:

我有以下Emp_Skill表:

Skill_ID*  Emp_ID*  Rating
--------------------------
WLN 120 6
WLN 348 5
WLN 361 7
WLN 370 8
LOC 120 7
LOC 370 7
LOC 348 7
BRV 120 3
LOC 361 6
BRV 348 1
KWH 348 5
KWH 120 5
KWH 361 5
KWH 370 5
SIC 361 8
SIC 348 4
SIC 120 2
DOL 348 5
DOL 361 8

我需要知道是否有任意数量的员工对每项技能都具有积极的技能评级

假设我想查看员工 120348361370 的信息.

技能 WLN 的查询 1 为:

SELECT `Emp_ID`, `Rating` > 0 AS `WLN` FROM `Emp_Skill` WHERE `Skill_ID` = 'WLN' AND `Emp_ID` IN (120,348,361,370)

返回:

Emp_ID   WLN
------------
120 1
348 1
361 1
370 1

查询 2 技能 LOC 为:

SELECT `Emp_ID`, `Rating` > 0 AS `LOC` FROM `Emp_Skill` WHERE `Skill_ID` = 'LOC' AND `Emp_ID` IN (120,348,361,370)

返回:

Emp_ID   LOC
------------
120 1
348 1
361 1
370 1

查询 3 技能 BRV 为:

SELECT `Emp_ID`, `Rating` > 0 AS `BRV` FROM `Emp_Skill` WHERE `Skill_ID` = 'BRV' AND `Emp_ID` IN (120,348,361,370)

返回:

Emp_ID   BRV
------------
120 1
348 1

技能 KSD查询 4 为:

SELECT `Emp_ID`, AVG(`Rating`) > 0 AS `KSD` FROM `Emp_Skill` WHERE `Skill_ID` IN ('KWH','SIC','DOL') AND `Emp_ID` IN (120,348,361,370) GROUP BY `Emp_ID`

返回:

Emp_ID   KSD
------------
120 1
348 1
361 1
370 1

问题是:如何有效地将这些查询组合到一个结果表中并一次性将它们全部包含,即:

Emp_ID   WLN   LOC   BRV   KSD
------------------------------
120 1 1 1 1
348 1 1 1 1
361 1 1 NULL? 1
370 1 1 NULL? 1

可能来自组合的 SELECT 语句? (NULL 值可以是返回结果集中计算结果为 FALSE 的任何值)

OR:从性能角度来看,如果我只是一一查询每个技能等级(使用上面的 4 个查询)会更好吗?

抱歉,如果这对于某些人来说是基本的,但我已经拔掉了很多头发,但我仍然没有杀死它。哈哈。提前致谢。

最佳答案

这是通过枢轴查询完成的,它相当于一堆CASE语句。我认为这应该让您接近您所需要的:

SELECT 
Emp_ID,
MAX(CASE WHEN Skill_ID = 'WLN' THEN (Rating > 0) END) AS `WLN`,
MAX(CASE WHEN Skill_ID = 'LOC' THEN (Rating > 0) END) AS `LOC`,
MAX(CASE WHEN Skill_ID = 'BRV' THEN (Rating > 0) END) AS `BRV`,
AVG(CASE WHEN Skill_ID IN ('KWH','SIC','DOL') THEN (Rating > 0) END) AS `KSD`
FROM Emp_Skill
GROUP BY Emp_ID

关于mysql - 将针对一张表的多个查询合并到一个结果集的多个字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10924920/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com