[英]Oracle throwing “invalid identifier” on COUNT() alias within GROUP BY
我正在尝试返回以下三列:歌曲ID,歌曲名称,时间播放。 这表示请求和播放的歌曲列表。
假设:
表SONG有SONG_ID和SONG_NAME,每首歌一行
表SONG_REQUEST每次请求歌曲时只有SONG_ID
每次播放歌曲时,表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.