テーブルを記させていただきました。testというテーブルに以下のようにデータが入っているtestというテーブルを想定しています。u_0で降順で上位3つのu_0とa_0を取得したいのですが、select sum(u_0),sum(s_0) order by u_0 desc limit 0,3では当然全集計となりますので意図したものとの結果になりません。是非、ご教授いただければ幸いです。
ちょっとかんがえてみたんですが、こんな感じでもできます。
ただindexがあまり利かないので効率的ではないですね。
もう少しなにかあるかもしれません。
SELECT sum( (
rank_u <=3
) * u_0 ) , sum( (
rank_s <=3
) * s_0 )
FROM (
SELECT (
SELECT COUNT( * ) +1
FROM test AS t2
WHERE t2.u_0 > t1.u_0
) AS rank_u, (
SELECT COUNT( * ) +1
FROM test AS t2
WHERE t2.s_0 > t1.s_0
) AS rank_s, u_0, s_0
FROM test AS t1
) AS SUB
なんか簡単な方法がありそう気がしますが、単純に命題を実行するとこんなかんじ
select sum(u_0),sum(s_0)
FROM
(
(select u_0,0 as s_0 from test order by u_0 DESC limit 3)
union all
(select 0,s_0 from test order by s_0 DESC limit 3)
) as sub
やっと理解が出来ました。もう一つ n_0というカラムがありそれも降順で同様に処理をする場合は
select sum(u_0),sum(s_0),sum(n_0)
FROM
(
(select u_0,0 as s_0,0 as n_0 from test order by u_0 DESC limit 3)
union all
(select 0 as u_0,s_0,0 as n_0 from test order by s_0 DESC limit 3)
union all
(select 0,0,n_0 from test order by n_0 DESC limit 3)
) as sub
で対応が出来ました。
ありがとうございました。
お礼
ご回答ありがとうございます。今回の文は現在理解が出来ていません。 と、申しますのも、私は雪国で開発をやっていまして、全国ニュースになっている豪雪状況でシステムを組むより除雪で体力を消耗しすぎて、やっと本日(2009/12/22)拝見することが出来たしだいです。 早速、分析させていただきたいと思います。 ありがとうございました。