单行子查询 returns 多行 BUT 一行
Single-row subquery returns more than one row BUT with one row
“CityJail”模式。我应该找到提交日期和听证日期之间的平均天数少于平均天数的每个上诉。
这是我的代码:
SELECT appeal_ID
FROM appeals
WHERE (hearing_date - filing_date) <
(SELECT AVG(hearing_date - filing_date)
FROM appeals
GROUP BY appeal_ID)
GROUP BY appeal_ID;
我收到一个错误:
ORA-01427: single-row subquery returns more than one row
01427. 00000 - "single-row subquery returns more than one row"
*Cause:
*Action:
求平均值本身就很好:
SELECT AVG(hearing_date - filing_date) "Average"
FROM appeals;
2810.666666666666666666666666666666666667
所以我在想:它不喜欢我的“GROUP BY”,所以我开始将它们一一注释掉:
SELECT appeal_ID
FROM appeals
WHERE (hearing_date - filing_date) <
(SELECT AVG(hearing_date - filing_date)
FROM appeals;
--GROUP BY appeal_ID)
--GROUP BY appeal_ID;
现在我收到错误:
ORA-00920: invalid relational operator
00920. 00000 - "invalid relational operator"
*Cause:
*Action:
Error at Line: 4 Column: 2
上诉table:
Name Null? Type
------------ -------- ---------
APPEAL_ID NOT NULL NUMBER(5)
CRIME_ID NOT NULL NUMBER(9)
FILING_DATE DATE
HEARING_DATE DATE
STATUS CHAR(1)
我认为您不需要任何 GROUP BY
子句:
SELECT appeal_ID
FROM appeals
WHERE hearing_date - filing_date < (SELECT AVG(hearing_date - filing_date) FROM appeals)
子查询计算两个日期在整个范围内的平均差 table - 这里不要使用 GROUP BY
子句,否则会 return 多行,并生成那个错误。外部查询可能也不需要聚合。
您也可以用 window 函数来表示:
select *
from (select a.*, avg(hearing_date - filing_date) over() avg_diff from appeals a) a
where hearing_date - filing_date < avg_diff
“CityJail”模式。我应该找到提交日期和听证日期之间的平均天数少于平均天数的每个上诉。
这是我的代码:
SELECT appeal_ID
FROM appeals
WHERE (hearing_date - filing_date) <
(SELECT AVG(hearing_date - filing_date)
FROM appeals
GROUP BY appeal_ID)
GROUP BY appeal_ID;
我收到一个错误:
ORA-01427: single-row subquery returns more than one row 01427. 00000 - "single-row subquery returns more than one row" *Cause:
*Action:
求平均值本身就很好:
SELECT AVG(hearing_date - filing_date) "Average"
FROM appeals;
2810.666666666666666666666666666666666667
所以我在想:它不喜欢我的“GROUP BY”,所以我开始将它们一一注释掉:
SELECT appeal_ID
FROM appeals
WHERE (hearing_date - filing_date) <
(SELECT AVG(hearing_date - filing_date)
FROM appeals;
--GROUP BY appeal_ID)
--GROUP BY appeal_ID;
现在我收到错误:
ORA-00920: invalid relational operator 00920. 00000 - "invalid relational operator" *Cause:
*Action: Error at Line: 4 Column: 2
上诉table:
Name Null? Type
------------ -------- ---------
APPEAL_ID NOT NULL NUMBER(5)
CRIME_ID NOT NULL NUMBER(9)
FILING_DATE DATE
HEARING_DATE DATE
STATUS CHAR(1)
我认为您不需要任何 GROUP BY
子句:
SELECT appeal_ID
FROM appeals
WHERE hearing_date - filing_date < (SELECT AVG(hearing_date - filing_date) FROM appeals)
子查询计算两个日期在整个范围内的平均差 table - 这里不要使用 GROUP BY
子句,否则会 return 多行,并生成那个错误。外部查询可能也不需要聚合。
您也可以用 window 函数来表示:
select *
from (select a.*, avg(hearing_date - filing_date) over() avg_diff from appeals a) a
where hearing_date - filing_date < avg_diff