DB2 中 order by 子句的相关子查询

Correlated subquery in order by clause in DB2

我有一个类似于以下的查询,想知道 DB2 是否抱怨 ORDER BY 子句中的相关性使用。它出错了

[42703][-206] "A.ID" is not valid in the context where it is used.. SQLCODE=-206, SQLSTATE=42703

我能够重写查询以避免相关性使用,但我在文档中找不到关于此的参考。这是错误还是我只是找不到有关预期行为的详细信息?

SELECT a.id
FROM A a
ORDER BY (
  SELECT COUNT(*)
  FROM   B b
  WHERE  b.id = a.id
)

您不能在 order by 子句中使用相关查询。但是有很多方法可以得到相同的结果,例如

select count(*) as count_num ,a.ID 
from
   a join  b on  a.ID=b.ID
GROUP BY a.ID
order by 1 DESC

解决方案 1:

SELECT a.id, (select count(*) from B where B.id=a.id) nbOFB 
FROM A 
order by 2

解决方案 2:

select * from (
SELECT a.id, (select count(*) from B where B.id=a.id) nbOFB 
FROM A
) tmp 
order by nbOFB

解决方案 3:

SELECT a.id, c.nb 
FROM A 
inner join lateral
 (
   select count(*) nb from B where B.id=a.id
 ) c on 1=1
order by c.nb 

解决方案 4:

SELECT a.id, ifnull(c.nb, 0) nb 
FROM A 
left outer join 
(
   select b.id, count(*) nb from B group by b.id
) c on a.id=c.id
order by ifnull(c.nb, 0)

解决方案 5:

with c as (
select b.id, count(*) nb from B group by b.id
)
SELECT a.id, ifnull(c.nb, 0) nb 
FROM A left outer join c on a.id=c.id
order by ifnull(c.nb, 0)