繁体   English   中英

Oracle在GROUP BY中的COUNT()别名上抛出“无效标识符”

[英]Oracle throwing “invalid identifier” on COUNT() alias within GROUP BY

我正在尝试返回以下三列:歌曲ID,歌曲名称,时间播放。 这表示请求和播放的歌曲列表。

假设:

  1. 表SONG有SONG_ID和SONG_NAME,每首歌一行

  2. 表SONG_REQUEST每次请求歌曲时只有SONG_ID

  3. 每次播放歌曲时,表PLAY都有SONG_ID

这是我的查询:

SELECT r.SONG_ID, s.SONG_NAME, COUNT(p.SONG_ID) AS TimesPlayed
FROM PLAY p
INNER JOIN SONG s ON p.SONG_ID = s.SONG_ID
LEFT JOIN SONG_REQUEST r ON p.SONG_ID = r.SONG_ID
GROUP BY p.SONG_ID, s.SONG_NAME, TimesPlayed

抛出的错误是:

ORA-00904: "TIMESPLAYED": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 5 Column: 33

Oracle不允许在GROUP BY子句中使用SELECT clasuse中的别名(您需要再次编写COUNT(p.SONG_ID) )但是无论如何TimesPlayed分组都没有多大意义。 您可能想要完全删除它。

此外,您还可以选择以下列:

r.SONG_ID, s.SONG_NAME

......但是试图分组

p.SONG_ID, s.SONG_NAME

这是一个错字吗?

您不能在group by或order子句中引用列别名。

无论如何,正如科林指出的那样,你实际上是按非聚合列进行分组。

这样的事情应该有效:

SELECT r.SONG_ID, s.SONG_NAME, COUNT(p.SONG_ID) AS TimesPlayed
FROM PLAY p
INNER JOIN SONG s ON p.SONG_ID = s.SONG_ID
LEFT JOIN SONG_REQUEST r ON p.SONG_ID = r.SONG_ID
GROUP BY r.SONG_ID, s.SONG_NAME;

请注意,在group by子句中,我引用了 select子句中完全相同的列(将别名p更改为r )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM