Django
でたまに DISTINCT
を使うんですが、毎回使い方を調べてたんで、メモしておきます。
DISTINCT とは
SQL
の SELECT
文で重複を除去してデータを取得する機能です。特定のフィールドの値のリストを取得したいが、重複した値は不要な時とかに利用します。
Django での使用方法
Django
の Queryset
での利用方法は下記の通りです。
records = MyModel.objects.all().order_by('key').distinct()
order_by
をつけていない場合、レコードに値がバラバラに入ってしまい、正しく重複を削除してくれないので注意が必要です。
ただ、上記の方法だと all()
で全てのレコードとフィールドを取得しているので、 primary key
が重複せず全てのレコードを取得してしまいます。
そこで、重複を除去して取得したいフィールドのみを指定するために、「 values_list
」を使用します。
records = MyModel.objects.all().order_by('key').distinct()values_list('key')
これで、「 key
」というフィールドの重複なしのデータを取得することができます。もし、条件付きで取得したい場合は、「 all()
」ではなく「 filter()
」を利用すれば、条件付きの重複なしのデータを取得可能です。
最後に
たまにしか利用しない DISTINCT
なんですが、今回のようにきちんと使い方をまとめておいていざというときに役に立つようにしておきたいですね。
コメント