distinct キーワードは、冗長な重複レコードを除外して 1 つだけを保持するために使用されますが、多くの場合、一意のレコードのすべての値を返すために使用されるのではなく、一意のレコードの数を返すためにのみ使用されます。その理由は、distinct は二重ループ クエリによってのみ解決できるためであり、これは間違いなく、非常に大量のデータを含む Web サイトの効率に直接影響します。
例を見てみましょう:
テーブル table
フィールド 1 5 b
これは単純な例ですが、実際にはさらに複雑になります。
たとえば、1 つのステートメントを使用して、重複しない名前を持つすべてのデータをクエリする場合は、distinct を使用して冗長な重複レコードを削除する必要があります。
select unique name from table 結果は次のとおりです:
----------
name a b c
効果は得られたようですが、取得したいのはID値ですか?クエリステートメントを変更します:
select unique name, id from table
結果は次のようになります:
----------
id name 1 a 2 b 3 c 4 c 5 b
Distinct が機能しないのはなぜですか?これは機能しますが、同時に 2 つのフィールドに影響します。つまり、除外するには ID と名前が同じである必要があります。 。 。 。 。 。 。
再度クエリステートメントを変更してみましょう:
select id、distinct name from table
残念ながら、エラー情報以外は何も取得できません。distinct は先頭に置く必要があります。 where条件にdistinctを入れるのはそんなに難しいですか?はい、それでもエラーが報告されます。
------------------------------------------------ -------------------------------------------------- ----------
次のメソッドは実行できません:
select *, count(distinct name) from table group by name
結果:
ORA-00979: not a GROUP BY 式
00979。00000 - 「GROUP BY 式ではありません」
それでもエラーが報告されます
order by と limit の前に group by を配置する必要があります。そうしないとエラーが報告されます
- ----- -------------------------------------- ----- -------------------------------------- ----- -
これは実現可能だと思います
名前でグループ化されたテーブルからmax(id)、名前を選択します;
結果:
id name
1 a
2 b
4日
5日