gpt4 book ai didi

mysql - 为派生表选择数据时出现未知列错误

转载 作者:行者123 更新时间:2023-11-29 09:53:07 24 4
gpt4 key购买 nike

我需要一个查询来创建一个表来计算给定字段中每个值的数量,但由于该表中的数据不足,必须连接另一个表以获得一个附加值(NName):

Records_table--------------       Name_table---------
Ref Score Iteration Ref NName
1 High 1 1 Falcon
1 Middle 2 2 Willow
2 Middle 1 3 Lance
2 Middle 2 4 Ranger
2 Low 3
3 Low 1
4 High 1
4 High 2
4 High 3

所需输出:

NName      High  Middle  Low
Falcon 1 1 0
Willow 0 2 1
Lance 0 0 1
Ranger 3 0 0

这就是我所拥有的:(编辑时我注意到我留在了一个选择字段(“引用”)中,我已在我的版本中删除了)

SELECT 
tc.nname AS NName,
COUNT(High) High,
COUNT(Middle) Middle,
COUNT(Low) Low
FROM
(SELECT
NName, 'High' High, NULL Middle, NULL Low
FROM
records_table tr
JOIN name_table tc ON tc.ref = tr.ref
WHERE
tr.score = 'High'
UNION ALL
SELECT
NName, NULL, 'Middle', NULL
FROM
records_table tr
JOIN name_table tc ON tc.ref = tr.ref
WHERE
tr.score = 'Middle'
UNION ALL
SELECT
NName, NULL, NULL, 'Low'
FROM
records_table tr
JOIN name_table tc ON tc.ref = tr.ref
WHERE
tr.score = 'Low' ) T
GROUP BY NName;

此操作失败,并显示“错误 1054 (42S22):‘字段列表’中未知的列‘NName’”

我做错了什么,我需要什么才能让这项工作成功?

最佳答案

虽然不是严格意义上的问题(而且这是一个封闭式问题,@scaisEdge 已经给出了正确的答案),但我不认为 union 是到达这里的最佳方式。考虑条件聚合

select n.ref,n.nname,
sum(case when score = 'high' then 1 else 0 end) High,
sum(case when score = 'middle' then 1 else 0 end) middle,
sum(case when score = 'low' then 1 else 0 end) low
from n
join r on r.ref = n.ref
group by n.ref,n.nname;

+------+--------+------+--------+------+
| ref | nname | High | middle | low |
+------+--------+------+--------+------+
| 1 | Falcon | 1 | 1 | 0 |
| 2 | Willow | 0 | 2 | 1 |
| 3 | Lance | 0 | 0 | 1 |
| 4 | Ranger | 3 | 0 | 0 |
+------+--------+------+--------+------+
4 rows in set (0.00 sec)

关于mysql - 为派生表选择数据时出现未知列错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54440035/

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