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
なんですが、今回のようにきちんと使い方をまとめておいていざというときに役に立つようにしておきたいですね。
コメント