[前][次][番号順一覧][スレッド一覧]

mysql:15579

From: Mikiya Okuno <Mikiya Okuno <mikiya.okuno@xxxxxxxxxx>>
Date: Thu, 28 Apr 2011 15:27:12 +0900
Subject: [mysql 15579] Re: 最新 10 件の内でベスト 5 の合計を取りたい

奥野です。

ポイントは次の2点ですね。

・結果を得るには異なるカラムでソートをする必要がある。
・LIMIT句で結果を絞り込んでからSUMで合計をとる。

いずれの場合もFROM句のサブクエリを利用する必要がありますので、
FROM句のサブクエリを2回利用する今のクエリ以外に方法はないと
思います。

ちなみに、

> MySQL Version 5.1.16

バージョンは古過ぎるように思います。本番環境で利用されるなら、
メンテナンスを考えるとせめてGA版にしたほうが良いと思います。

ではでは。
--
奥野 幹也 
http://www.google.com/profiles/mikiya.okuno
http://nippondanji.blogspot.com/ 
http://twitter.com/nippondanji


On 04/28/2011 02:34 PM, 岩崎 誠司 wrote:
> 岩崎と申します。
> いつも皆様MLを参考にさせていただいてます。
> ちょっと皆様のお知恵を拝借したいと思い投稿しました。
> 表題にもありますが、該当する「num」の一定期間の最新のデータ
> 10件のうち、diffのベスト5の合計を取りたいので以下のようなクエリで
> 取得しましたが、SELECTを何回も重ねるので
> スッキリせずに分かりにくいクエリになっています。
> 他に方法はないでしょうか、よろしくお願いします。
> ちなみにベスト5のデータを取るのでしたら、「AS d」の()内の
> クエリで取れます。
> SELECT SUM(di)
> FROM
> (SELECT di FROM
> (SELECT diff AS di
> FROM hd
> WHERE num = 1
> AND day BETWEEN '2010-04-01' AND '2011-03-31'
> ORDER BY day DESC LIMIT 10
> ) AS s
> ORDER BY di
> LIMIT 5
> ) AS d
> 
> テーブル作成文
> CREATE TABLE `hd` (
> `id` int(11) NOT NULL AUTO_INCREMENT,
> `num` int(11) NOT NULL,
> `day` date DEFAULT NULL,
> `diff` int(11) NOT NULL,
> PRIMARY KEY (`id`)
> ) ENGINE=MyISAM
> 環境
> OS Windows7 professional SP1
> MySQL Version 5.1.16

[前][次][番号順一覧][スレッド一覧]

   @ 15578 2011-04-28 14:34 [岩崎 誠司 <iwasaki_] 最新 10 件の内でベスト 5 の合計を取りたい
->   15579 2011-04-28 15:27 ┗[Mikiya Okuno <mikiya]                                       
     15580 2011-04-28 16:58  ┗[岩崎 誠司 <iwasaki_]