Django Logo

[Django]Queryset で DISTINCT を使用する方法

Django でたまに DISTINCT を使うんですが、毎回使い方を調べてたんで、メモしておきます。

DISTINCT とは

SQLSELECT 文で重複を除去してデータを取得する機能です。特定のフィールドの値のリストを取得したいが、重複した値は不要な時とかに利用します。

Django での使用方法

DjangoQueryset での利用方法は下記の通りです。

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

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です