しばしばTSQLで次のクエリを使用して:どのようにすべての列を選択するには、カウント(*)同じクエリで
SELECT COUNT(*), *
FROM CUSTOMER c
WHERE c.Name like 'foo%';
私は、Oracle SQL Developerでこのクエリを実行しようとすると、それはありません
"Missing expression"
どのような構文が良いですか?
ありがとうございます。
しばしばTSQLで次のクエリを使用して:どのようにすべての列を選択するには、カウント(*)同じクエリで
SELECT COUNT(*), *
FROM CUSTOMER c
WHERE c.Name like 'foo%';
私は、Oracle SQL Developerでこのクエリを実行しようとすると、それはありません
"Missing expression"
どのような構文が良いですか?
ありがとうございます。
1つのアプローチは、次のようなことを行うことです。これにより、各行のカウント(*)結果が得られます。しかし、気をつけて、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%'
これは、パフォーマンスが向上します:
SELECT COUNT(*) OVER(), c.*
FROM CUSTOMER c
WHERE c.Name like 'foo%';
説明は良いでしょう – Blauhirn
@Blauhim、それは空のウィンドウ節を持つ分析関数です - それで、結果セット全体の行の数を計算します。通常は、テーブルの各ブロックを1回だけ訪れて、行を数えながらカウントする必要があるため、パフォーマンスが向上します。 –
@Jeffreyこれはいいですが、作成するすべての行の余分な列は、特にすべての列の集計がある場合は、選択カウント(*)よりもオーバーヘッドが発生する傾向があります。最初の行と同じ集約を持つことは可能ですが、各行に対して再度繰り返さないのですか? – user3758745
あなたは...でグループを使用するか、2つのクエリの結果を結合する必要があります。 –
Plzはあなたのテーブルのスキーマを提供しています。 –
SQL Serverでその文が動作するとは思わない –