课程问题所以请不要给我答案!
我正在尝试将去年销售额与今年的销售额进行比较,而我正在使用的方法是使用临时表,其中包含由联合加入的2个Select语句
SELECT theatreNo, SUM(lastMay) AS lastMay, SUM(thisMay) AS thisMay
FROM(
SELECT
theatreNo,
COUNT(*) AS lastMay
FROM Hospital_Operation
WHERE year(startDateTime) = '2015' and month(startDateTime) = '05'
GROUP BY theatreNo, DATE_FORMAT(startDateTime, '%d%c%y')
UNION ALL
SELECT
theatreNo,
COUNT(*) AS thisMay
FROM Hospital_Operation
WHERE year(startDateTime) = '2016' and month(startDateTime) = '05'
GROUP BY theatreNo, DATE_FORMAT(startDateTime, '%d%c%y')
)AS Temp
GROUP BY theatreNo;
我收到错误:字段名称
中的未知列“thismay”有人可以向我解释为什么我会收到此错误吗?我理解的方式是我加入表并将其存储在TEMP表中。
答案 0 :(得分:1)
首先,在这里给你一个方法。
SELECT theatreNo, SUM(lastMay) AS lastMay, SUM(thisMay) AS thisMay
FROM(
SELECT
theatreNo,
COUNT(*) AS lastMay,
0 AS thisMay
FROM Hospital_Operation
WHERE year(startDateTime) = '2015' and month(startDateTime) = '05'
GROUP BY theatreNo, DATE_FORMAT(startDateTime, '%d%c%y')
UNION ALL
SELECT
theatreNo,
0 AS lastMay,
COUNT(*) AS thisMay
FROM Hospital_Operation
WHERE year(startDateTime) = '2016' and month(startDateTime) = '05'
GROUP BY theatreNo, DATE_FORMAT(startDateTime, '%d%c%y')
)AS Temp
GROUP BY theatreNo;
然后让我们做一些解释:
在Temp
查询中,您使用了UNION ALL
,第一个查询将决定此查询结果中的列名,因此temp
仅生成列theatreNo
}和lastMay
,然后在第二个查询中,thisMay
将被第一个查询lastMay
覆盖,因此当您在外部查询中选择列thisMay
时,它造成
未知列"这可能" 。
以下是关于UNION
的官方文档:
第一个SELECT语句中的列名用作返回结果的列名。在每个SELECT语句的相应位置中列出的选定列应具有相同的数据类型。 (例如,第一个语句选择的第一列应该与其他语句选择的第一列具有相同的类型。)