SQL(Mysql)について質問です。


例えば以下のようなテーブルがあります。

テーブル名: TEST
項目: KOUMOKU1 KOUMOKU2

KOUMOKU2には各商品の売り上げが入っており KOUMOKU1には各商品の商品名が入っています。

TESTに入っている KOUMOKU1 の中で一番多い売り上げ商品の商品名と売り上げ総額を出したいと考えているのですがいまいちやり方がわかりません。

その後2番目、3番目、4番目と上位5番目までの多い売り上げの商品の商品名と売り上げ総額を出したいのですが、お手数をおかけしますがわかるかたおりましたらよろしくお願いします。(出来れば一緒に1位から5位まで閲覧できるといいと考えています。)

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/10/03 14:03:14
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:komamitsu No.3

回答回数21ベストアンサー獲得回数2

ポイント100pt

シンプルに。

SELECT koumoku1, SUM(koumoku2) AS sum FROM test GROUP BY koumoku1 ORDER BY sum DESC LIMIT 5;
id:aiomock

ご回答ありがとうございます。

2009/10/03 12:35:12

その他の回答2件)

id:code_tk No.1

回答回数77ベストアンサー獲得回数11

ポイント27pt

いまいちテーブル構造が分からないので何とも言えないのですが

こんな感じでできませんか

select

*

from

(

select

koumoku1,

sum(koumoku2) goukei

from

test

group by

koumoku1

)

order by

goukei

limit 0, 5

id:aiomock

ご回答ありがとうございます。

2009/10/03 03:47:16
id:huruyosi No.2

回答回数30ベストアンサー獲得回数3

ポイント27pt
mysql> desc test;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| koumoku1 | varchar(128) | YES  |     | NULL    |       |
| koumoku2 | int(8)       | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> select * from test;
+----------+----------+
| koumoku1 | koumoku2 |
+----------+----------+
| PC       |   100000 |
| PC       |   120000 |
| PC       |   130000 |
| PC       |   140000 |
| PC       |   160000 |
| MOUSE    |     1980 |
| MOUSE    |     2980 |
| MOUSE    |      980 |
| MOUSE    |     1500 |
| KEYBORAD |     7000 |
| MEMORY   |     4300 |
| HDD      |     6200 |
| CD-ROM   |       50 |
+----------+----------+
13 rows in set (0.00 sec)

mysql>

こんなテーブルだとして

select
  koumoku1,
  sum(koumoku2) goukei
from test
  group by ( koumoku1)
order by goukei desc
limit 0,5;

こうかな。結果は

+----------+--------+
| koumoku1 | goukei |
+----------+--------+
| PC       | 650000 |
| MOUSE    |   7440 |
| KEYBORAD |   7000 |
| HDD      |   6200 |
| MEMORY   |   4300 |
+----------+--------+
5 rows in set (0.00 sec)

売り上げが一番多い商品だけを必要とするなら、limitを調整してください。

id:aiomock

ご回答ありがとうございます。

2009/10/03 12:35:10
id:komamitsu No.3

回答回数21ベストアンサー獲得回数2ここでベストアンサー

ポイント100pt

シンプルに。

SELECT koumoku1, SUM(koumoku2) AS sum FROM test GROUP BY koumoku1 ORDER BY sum DESC LIMIT 5;
id:aiomock

ご回答ありがとうございます。

2009/10/03 12:35:12
  • id:aiomock
    実行中以下のようなエラーが出ました。

    #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select `KOUMOKU1`, sum(`KOUMOKU2`) goukei from TEST

    SELECT付近がおかしいと出ているのですが、どのように対処したらいいかわかりません。
    バージョンの違いによるものとかあるのでしょうか?

    MySQL クライアントのバージョン: 4.1.22

    とはなっております。
  • id:taknt
    KOUMOKU2の型は?
  • id:aiomock
    int になります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません