1

たとえば、クエリがある場合

SELECT * FROM MY_TABLE WHERE FIRSTNAME = 'HENRY';

つまり、HENRY に対して同一の 20 件の結果が返されます。

元のクエリの結果をクエリして、重複していないものだけを返す方法はありますか。

これは些細な例ですが、基本的には、大規模なデータ セットに対して SELECT DISTINCT を実行しようとしているクエリがあります。DISTINCT を指定しないと、重複データが比較的小さく高速に返されます。これらの結果に対して SELECT DISTINCT を実行するために適用できる SQL のロジックはありますか。応答時間を短縮するためにクエリを本質的に分割しますか? 価値のあるものはすべて索引付けされていると仮定します。

ありがとう

4

2 に答える 2

0

レコード グループの最初のレコードを返すには、次のようにします。

select *
from
(
    SELECT *, row_number() over (partition by firstname order by id) r
    FROM MY_TABLE 
    --WHERE FIRSTNAME = 'HENRY'
) x
where x.r = 1

レコードが完全に重複している場合、それらはすべて同じであるため、最初のレコードについて心配する必要はありません。したがって、別個のレコードが必要なだけです。

SELECT distinct *
FROM MY_TABLE 
WHERE FIRSTNAME = 'HENRY'

または、重複の数を確認するには:

SELECT *, count(*)-1 NoOfDuplicates
FROM MY_TABLE 
WHERE FIRSTNAME = 'HENRY'
group by firstname, lastname --, ...
于 2013-10-24T10:54:26.733 に答える