pl/sql select子查询的标识符无效-can';t在“中使用新的子查询”;其中;
我不明白为什么我可以按新的子查询pl/sql select子查询的标识符无效-can';t在“中使用新的子查询”;其中;,select,plsql,subquery,Select,Plsql,Subquery,我不明白为什么我可以按新的子查询排序,但同时不能用where查询它,就好像我没有定义注释一样 SELECT USERNAME, (SELECT COUNT(C_KEY) AS COMMENT_COUNT FROM COMMENTS coms WHERE coms.U_KEY = usrs.U_KEY) AS COMMENT_COUNTED FROM USERS usrs WHERE COMMENT_COUNTED >= 3 ORDER by COMMENT_COUNTED
排序,但同时不能用where
查询它,就好像我没有定义注释一样
SELECT USERNAME,
(SELECT COUNT(C_KEY) AS COMMENT_COUNT
FROM COMMENTS coms
WHERE coms.U_KEY = usrs.U_KEY) AS COMMENT_COUNTED
FROM USERS usrs
WHERE COMMENT_COUNTED >= 3
ORDER by COMMENT_COUNTED desc;
我还尝试了注释计数的地方。注释计数>=3
我的错误消息:
ORA-00904: "COMMENT_COUNTED"."COMMENT_COUNT": invalid identifier
编辑:我有一个糟糕的“解决方案”。它确实有效,但我真的想找到另一种方法。我可以将相同的子查询放在的WHERE
中,然后比较它是否>=3,如下所示:
SELECT USERNAME,
(SELECT COUNT(C_KEY) AS COMMENT_COUNT
FROM COMMENTS coms
WHERE coms.U_KEY = usrs.U_KEY) AS COMMENT_COUNTED
FROM USERS usrs
WHERE (SELECT COUNT(C_KEY) AS COMMENT_COUNT
FROM COMMENTS coms
WHERE coms.U_KEY = usrs.U_KEY) >= 3
ORDER by COMMENT_COUNTED desc;
SELECT USERNAME,
(SELECT COUNT(C_KEY) AS COMMENT_COUNT
FROM COMMENTS coms
WHERE coms.U_KEY = usrs.U_KEY) AS COMMENT_COUNTED
FROM USERS usrs
WHERE COMMENT_COUNTED >= 3
ORDER by 2 desc;
这样做:
要么:
with tbl as(SELECT C_KEY AS COMMENT_COUNT
FROM COMMENTS )
SELECT USERNAME,count(coms.COMMENT_COUNT)
FROM USERS usrs
join tbl coms
on coms.U_KEY = usrs.U_KEY
WHERE coms.COMMENT_COUNT >= 3
ORDER BY coms.COMMENT_COUNT DESC;
或:
对于“按新子查询排序”查询,您可以按以下列的编号排序:
SELECT USERNAME,
(SELECT COUNT(C_KEY) AS COMMENT_COUNT
FROM COMMENTS coms
WHERE coms.U_KEY = usrs.U_KEY) AS COMMENT_COUNTED
FROM USERS usrs
WHERE (SELECT COUNT(C_KEY) AS COMMENT_COUNT
FROM COMMENTS coms
WHERE coms.U_KEY = usrs.U_KEY) >= 3
ORDER by COMMENT_COUNTED desc;
SELECT USERNAME,
(SELECT COUNT(C_KEY) AS COMMENT_COUNT
FROM COMMENTS coms
WHERE coms.U_KEY = usrs.U_KEY) AS COMMENT_COUNTED
FROM USERS usrs
WHERE COMMENT_COUNTED >= 3
ORDER by 2 desc;
如果需要将数据输入到中,则有三个选项:
I.在where子句中放置相同的子查询
SELECT USERNAME,
(SELECT COUNT(C_KEY) AS COMMENT_COUNT
FROM COMMENTS coms
WHERE coms.U_KEY = usrs.U_KEY) AS COMMENT_COUNTED
FROM USERS usrs
WHERE (SELECT COUNT(C_KEY) AS COMMENT_COUNT
FROM COMMENTS coms
WHERE coms.U_KEY = usrs.U_KEY) >= 3
ORDER by 2 desc;
二,。基于子查询进行查询:
SELECT USERNAME, COMMENT_COUNTED
FROM (SELECT USERNAME,
(SELECT COUNT(C_KEY) AS COMMENT_COUNT
FROM COMMENTS COMS
WHERE COMS.U_KEY = USRS.U_KEY) AS COMMENT_COUNTED
FROM USERS
) USRS
WHERE COMMENT_COUNTED >= 3
ORDER BY COMMENT_COUNTED DESC;
使用此选项,可以在ORDERBY子句中使用列名
更新:
三、 使用GROUPBY子句和聚合函数(这是一个更好、更干净的解决方案):
执行where子句后才会创建注释。就查询的结构而言,SQL的执行流基本上是自下而上的,但我们自上而下地编写和解释它
其他答案提供了正确的查询,但从未解释您的尝试不起作用的原因
以下是另一种方法:
select * from (
SELECT USERNAME,
(
SELECT COUNT(C_KEY) AS COMMENT_COUNT
FROM COMMENTS coms
WHERE coms.U_KEY = usrs.U_KEY
) AS COMMENT_COUNTED
FROM USERS usrs
) as a
WHERE a.COMMENT_COUNTED >= 3
ORDER by a.COMMENT_COUNTED desc;