dポイントプレゼントキャンペーン実施中!

任意の上位の集計を取得するにはどうしたらよいかわかりません。初めての質問なので、うまく表現できないことをご容赦ください。

例としてテーブルを記させていただきました。

testというテーブルに以下のようにデータが入っているtestというテーブルを想定しています。u_0で降順で上位3つのu_0とa_0を取得したいのですが、
select sum(u_0),sum(s_0) order by u_0 desc limit 0,3

では当然全集計となりますので意図したものとの結果になりません。
是非、ご教授いただければ幸いです。

+--------+------+
| u_0 | s_0 |
+--------+------+
| 510 | 1 |
| 1701 | 9 |
| 22454 | 91 |
| 43271 | 148 |
| 2979 | 9 |
| 618 | 8 |
| 161148 | 420 |
| 6657 | 21 |
| 12562 | 17 |
| 7619 | 25 |
+--------+------+

sum(u_0)=161148+43271+22454
sum(a_0)=420+148+91

取得したいのは

+----------+----------+
| sum(u_0) | sum(s_0) |
+----------+----------+
| 226873 | 659 |
+----------+----------+
ということなのですが、よろしくお願い申し上げます。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/22 12:21

なんか簡単な方法がありそう気がしますが、単純に命題を実行するとこんなかんじ



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/16 09:43
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/15 17:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す