Oracle Apex交互式报表能否在SQL查询中使用列值?
在Oracle Apex交互式报表中根据当前行列值关联统计的实现方法
完全可以实现,只需要将子查询修改为关联子查询,让子查询引用外层当前行的KSIAZKAID列值即可,同时还能优化掉子查询中不必要的表连接。
修改后的关联子查询写法
select LIB_KSIAZKA.KSIAZKAID as "Id Książki", LIB_KSIAZKA.TYTUL as "Tytuł", LIB_KSIAZKA.IMIE as "Imię autora", LIB_KSIAZKA.NAZWISKO as "Nazwisko autora", LIB_KSIAZKA.GATUNEK as "Gatunek", LIB_KSIAZKA.OCENA as "Ocena", -- 关联子查询:引用外层当前行的KSIAZKAID,去掉多余的表连接 (SELECT Count(e.egzemplarzid) from lib_egzemplarz e WHERE e.status='DOSTĘPNA' AND e.ksiazkaid = LIB_KSIAZKA.KSIAZKAID) as "Liczba dostępnych egzemplarzy" from LIB_KSIAZKA;
另一种优化写法:LEFT JOIN + GROUP BY
如果数据量较大,推荐用左连接分组的方式,性能通常比逐行子查询更优:
select k.KSIAZKAID as "Id Książki", k.TYTUL as "Tytuł", k.IMIE as "Imię autora", k.NAZWISKO as "Nazwisko autora", k.GATUNEK as "Gatunek", k.OCENA as "Ocena", COUNT(e.egzemplarzid) as "Liczba dostępnych egzemplarzy" from LIB_KSIAZKA k left join lib_egzemplarz e on e.ksiazkaid = k.KSIAZKAID and e.status='DOSTĘPNA' group by k.KSIAZKAID, k.TYTUL, k.IMIE, k.NAZWISKO, k.GATUNEK, k.OCENA;
关键说明
- 关联子查询中,直接用外层表的列名
LIB_KSIAZKA.KSIAZKAID替代页面参数:P3_ID,就能自动匹配当前行的图书ID进行统计。 - 原查询中子查询里的
INNER JOIN lib_ksiazka k是冗余的,因为外层已经查询了LIB_KSIAZKA,子查询只需要通过e.ksiazkaid关联外层列即可。 - 左连接分组的方式会一次性完成所有统计,避免逐行执行子查询的开销,适合数据量较大的场景。
内容的提问来源于stack exchange,提问作者misqzu
相关产品推荐
相关产品推荐

