【发布时间】:2019-06-23 16:49:46
【问题描述】:
我需要一个查询来创建一个表来计算给定字段中每个值的数量,但由于这个表中的数据不足,我不得不加入另一个表以获得一个额外的值 (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 字段(“Ref”))
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’”
我做错了什么,我需要做什么才能完成这项工作?
【问题讨论】:
-
您能否执行内部
SELECT(即带有联合的那个)并查看您在输出中看到的列名是什么? -
我想我会使用条件聚合以不同的方式做到这一点。
-
@Darshan Mehta,我只执行了第一个,因为我在开始时不再有 select 语句,我不得不用“NName”代替字段名称“tc.Nname”,这个工作。但是,当我再次运行整体时,它仍然失败:
-
SELECT tc.nname AS NName, COUNT(High) High, COUNT(Middle) Middle, COUNT(Low) Low FROM (SELECT tc.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....... WHERE tr.score = 'Low' ) T GROUP BY tc.nname;错误 1054 (42S22):“字段列表”中的未知列“cases.project”
-
@P Salmon,你是个明星,辛苦了,将在下面发布完整的解决方案,谢谢。
标签: mysql subquery derived-table