对于一个项目,我希望按天获取所有结果。
这是我的查询:
SELECT MAX(id) AS id,
SUM(value) AS value,
country,
cast(TO_CHAR(date, 'dd/mm/yyyy') AS DATE) AS date
FROM records
GROUP BY date, country
我的问题是,当我使用“日期”别名时,记录没有正确分组,而是按字段名称分组。
按别名分组的结果
如果我使用索引而不是别名,则可以使用,但是我想在结果中使用列名:
SELECT MAX(id) AS id,
SUM(value) AS value,
country,
cast(TO_CHAR(date, 'dd/mm/yyyy') AS DATE) AS date
FROM records
GROUP BY 3, 4
按索引分组的结果
有人知道为什么这样工作吗?
答案 0 :(得分:0)
grouping_element内部使用的表达式可以是输入列名称,也可以是输出列(SELECT列表项)的名称或序号,或者是由输入列值组成的任意表达式。 如有歧义,GROUP BY名称将被解释为输入列名称,而不是输出列名称
(重点是我的)
因此,(输入)列名称始终优先于列别名。
答案 1 :(得分:0)
两个GROUP BY
子句不相同。
两者中的SELECT
子句是:
SELECT
MAX(id) AS id,
SUM(value) AS value,
country,
cast(TO_CHAR(date, 'dd/mm/yyyy') AS DATE) AS date
因此列将为(id
,value
,country
,date
)。
第一个查询按date
然后country
分组:
GROUP BY date, country
第二组依次为country
和date
:
GROUP BY 3, 4
使用GROUP BY
的不同层次结构,您将获得不同的结果,例如显示的结果。