如何选择所有列,以及同一查询中的计数(*)

Eti*_*hur 26 sql oracle

经常在TSQL中使用以下查询:

SELECT COUNT(*), * 
FROM CUSTOMER c 
WHERE c.Name like 'foo%';
Run Code Online (Sandbox Code Playgroud)

当我尝试在Oracle SQL Developer中执行此查询时,它不起作用并抛出一个错误:

"失踪的表情"

什么是好的语法?

提前致谢.

Jef*_*emp 50

这将表现得更好:

SELECT COUNT(*) OVER (), c.*
FROM CUSTOMER c 
WHERE c.Name like 'foo%';
Run Code Online (Sandbox Code Playgroud)

  • 解释会很好 (9认同)
  • @Blauhim,它是一个带有空窗口子句的分析函数 - 因此它计算整个结果集中的行数.它通常会表现得更好,因为它应该只访问表的每个块一次,计算行数. (2认同)

Kar*_*arl 11

一种方法是执行以下操作.这将导致每行的计数(*)结果.但要注意,有一个Cartesianjoin; 如果你有很多像'foo%'那样的行,这将会表现不佳.

select a.cntr, c.*
from CUSTOMER c 
   , (select count(*) cntr
     from customer b
     where b.name like 'foo%' ) a
where c.name like 'foo%'
Run Code Online (Sandbox Code Playgroud)