• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:任意の上位の集計を取得するには?)

任意の上位の集計を取得する方法は?

このQ&Aのポイント
  • 任意の上位の集計を取得するにはどうしたらよいかわかりません。
  • 初めての質問なので、うまく表現できないことをご容赦ください。
  • テーブルを記させていただきました。testというテーブルに以下のようにデータが入っているtestというテーブルを想定しています。u_0で降順で上位3つのu_0とa_0を取得したいのですが、select sum(u_0),sum(s_0) order by u_0 desc limit 0,3では当然全集計となりますので意図したものとの結果になりません。是非、ご教授いただければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ちょっとかんがえてみたんですが、こんな感じでもできます。 ただ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

Q-any
質問者

お礼

ご回答ありがとうございます。今回の文は現在理解が出来ていません。 と、申しますのも、私は雪国で開発をやっていまして、全国ニュースになっている豪雪状況でシステムを組むより除雪で体力を消耗しすぎて、やっと本日(2009/12/22)拝見することが出来たしだいです。 早速、分析させていただきたいと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

なんか簡単な方法がありそう気がしますが、単純に命題を実行するとこんなかんじ 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

Q-any
質問者

お礼

早速ご回答を頂戴いたしまして、ありがとうございました。 本当に思ったとおり結果がでました。 SQL文は本当に初心者でわかりませんでしたし、ご回答の意味もこれから調べます。自己結合なんだろうと思うだけです。詳しく勉強させていただきます。 ありがとうございました。

Q-any
質問者

補足

やっと理解が出来ました。もう一つ 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 で対応が出来ました。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A