質問編集履歴

1 コードの誤り

Mcgregor

Mcgregor score 30

2020/04/19 04:22  投稿

djangoのクエリでcountとlimitをする方法
お世話になっております。
djangoでクエリセットを記載していたのですが期待した動作がされません。
ご教示いただければと思います。
以下のテーブル/レコードが存在します。
table_A
|key|date|result|
|:--|:--:|--:|
|1|2020-03-29 21:18:00|100|
|2|2020-03-29 21:19:00|100|
|3|2020-03-29 21:20:00|100|
|1|2020-03-29 21:21:00|110|
|2|2020-03-29 21:22:00|100|
|1|2020-03-29 21:23:00|120|
|1|2020-03-29 21:24:00|100|
|〜|以下時間が違うレコード|〜|
この時に以下の様な結果を得たいと思っています。
1.keyが"1"の物のみを抽出する。
2.dateでOrder_byで最新のレコードを10取り出す。
3.resultをcountでそれぞれが何個あるか取り出したい。
以下はSQLで表現した場合です。
```SQL
select result, count(result)
 from (
   select result from table_A
    where key = 1 limit 10) as q1
;
結果
100 6
110 3
120 1
```
これをdjangoのクエリで以下の様に記載しました。
```Python
views.py
 all = table_A.objects.all().filter(key=1).order_by('-date')[:10]
 count = all.values('result').annotate(total=Count('result'))
params = {  
 'data': count,  
}  
 
```
```html
index.html
 {% for result in status_result %} 
   {{result.status_code}}
   {{result.total}}
 {% for i in data %} 
   {{i.result}}
   {{i.total}}
 {% endfor %}
```
ですが、この結果がkey=1の物のみ取得はできているようですが、
100 1
100 1
110 1
120 1
〜〜〜
という風に集計されず、期待した表示がされません。
お手数おかけしますが、御助力お願いいたします。
  • Django

    4575 questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

  • Python 3.x

    18987 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る