• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL文について教えてください。)

SQL文で売上データを担当毎に降順に整列する方法

このQ&Aのポイント
  • MySQLでSQLを勉強している方へ。売上データを担当者・売上額降順で整列して、担当毎に上位3件ずつ抽出する方法を教えます。
  • 具体的なデータ例を使って、どのようにSQL文を書けば良いのか、ステップバイステップで解説します。
  • この方法を使えば、売上データを簡単に整理し、担当者別に売上上位3件を見つけることができます。SQL文の書き方に迷った場合は、ぜひ参考にしてください。

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

  • ベストアンサー
  • galoon
  • ベストアンサー率28% (38/133)
回答No.2

改善の余地がありますが、思いつきで実現した方法を参考までに投稿します。MySQL 5.0.18 で確認しました。 ---- ここから ---- SELECT @A:=0, @B:=0, @C:=0, @D:=0; SELECT TAN, TOK, URIKIN FROM (SELECT @D:=@D+1 ROWNUMBER, TAN, TOK, URIKIN FROM TEST.TABLE1 ORDER BY TAN, URIKIN DESC) X WHERE ROWNUMBER IN (SELECT MIN(ROWNUMBER) FROM (SELECT @A:=@A+1 ROWNUMBER, A.TAN, A.TOK, A.URIKIN FROM TEST.TABLE1 A ORDER BY A.TAN, A.URIKIN DESC) B GROUP BY TAN UNION ALL SELECT MIN(ROWNUMBER) + 1 FROM (SELECT @B:=@B+1 ROWNUMBER, A.TAN, A.TOK, A.URIKIN FROM TEST.TABLE1 A ORDER BY A.TAN, A.URIKIN DESC) B GROUP BY TAN UNION ALL SELECT MIN(ROWNUMBER) + 2 FROM (SELECT @C:=@C+1 ROWNUMBER, A.TAN, A.TOK, A.URIKIN FROM TEST.TABLE1 A ORDER BY A.TAN, A.URIKIN DESC) B GROUP BY TAN) ---- ここまで ---- あまり美しくないのですが、ご容赦を (--;)

zerokara
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 参考にさせていただきました。 有難う御座いました。

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

その他の回答 (1)

  • galoon
  • ベストアンサー率28% (38/133)
回答No.1

MySQLはバージョンごとにできることが大幅に違うためお使いのバージョンをお書きになった方がよろしいですよ。 それと、MySQLのSQLのみで実現したいのでしょうか? それとも、「プログラム」や「作業用テーブルの利用」などの手段も利用するつもりなのでしょうか?

zerokara
質問者

お礼

有難う御座います。 LinuxでMySQLversion: 5.0.15を使っております。 まずは、SQL文のみで考えてみたいです、それで難しいのであれば、 TEMPORARY TABLEなどを利用する手段は問いません。 VBとかのレコードセットまで考えると少し悲しいです。

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

関連するQ&A

  • SQL文を教えてください

    SQL文を教えてください。 以下のテーブルがあります。 T入金 [ID] [名前] [金額] [入金日] 1, 山田, 25000, 2009/01/01 2, 佐藤, 5000, 2009/02/01 3, 山田, 30000, 2009/01/02 4, 佐藤, 45000, 2009/02/02 5, 佐藤, 10000, 2009/02/03 同じ人物で、入金額50000円に至ったときの入金日を 抽出したいと思っています。 上記データだと、 山田さんは入金日2009/01/02、 佐藤さんは入金日2009/02/02、 ということになります。 これを一つのSQL文で抽出できますでしょうか。 ご教授宜しくお願いいたします。 (Access2000のクエリで抽出しようとしていますが、Accessで無理ならSQL Server、MySQL、PostgreSQLでも可です)

  • 上位3位を求めるSQL文は?

    Mysqlのバージョンは4.0.14です。 次のようなテーブルがあります。 id   money ----------------- 1 2500 2 3200 1 1200 3 5000 4 2500 5 1200 IDでグループ化し、上位3件を抽出したいのです。 以下のように抽出したいのです。 Ranking id money 1 3 5000 2 1 3700 6 2 3200 SQLServerなら、上位何件かを取り出すには、 TOPを利用するようですが、 MYSQLにもそのようなものはないのでしょうか?

    • ベストアンサー
    • MySQL
  • 特定の数だけ取得するSQL文

    SQLのselect 文で 例えば100000件マッチしたとします。 ただ、最初の50件だけ抽出したいといった場合、 どういったselect文を作成すれば、最初の50件だけ 取得できるのでしょう?

    • ベストアンサー
    • MySQL
  • SQLの書き方(UPDATE文)

    SQLの書き方の質問です。 売上Tと商品Mというテーブルがあったとして、 売上Tには商品コード、数量、金額という項目が 商品Mには商品コード、単価という項目が それぞれあったとします。 売上Tの金額=売上T.数量×商品M.単価 この売上Tの金額を更新するのに、update文でできるだけシンプルに高速に動くSQL文を作成したいのですが、どのような書き方がよいと思いますか? 件数は例えば売上が100万件、商品が10万件あった場合を想定して。 以上よろしくお願いいたします。

  • SQLのSELECT文でのランダム抽出について

    SQLのSELECT文でのランダム抽出について データベースSQLiteでSELECT文の結果をランダムに抽出するには ORDER BY RANDOM()を使うようですが、前回ランダムに抽出された順序と同じ結果を得るにはどのようにすればよいでしょうか。 MySQLの場合は、ORDER BY RAND(n)でnの値を同じにすれば、同じ順序で抽出できるようですが、SQLiteでは無理なようです。 今考えているのはRANDOM()で得られた列の一つ(たとえばID)を一時的に別のテーブルを作成して保存後、その一時テーブルを利用するというものですが、もっと良い方法があるのではと思います。 何か別の方法がありましたら、教えていただきたくよろしくお願いいたします。

  • SQLのSELECT文教えてください。

    VB5.0で、DBはSqlServer2000です。 SQL文のSELECT文で質問です。 ○A_TABLEの構成(概略) ・・・担当コード1・・・担当コード2 ○TANTO_TABLE 担当コード/担当名 (質問)TANTO_TABLEからA_TABLEの担当コード1と担当コード2の担当名を抽出したいのです。 次のSQLだと担当コード1のみしか抽出できません。 効率よく担当コード1と2の担当名を抽出するSQLを教えてください。お願いします。 SELECT 担当名 FROM A_TABLE,TANTO_TABLE WHERE A_TABLE.担当コード1 = TANTO_TABLE.担当コード

  • SQL文 グループ集計TOPに対する明細

    すみません、教えてください。 得意先の売上額上位10社のそれぞれについて、仕入合計額上位10商品のリストを出力するSQL 文をがわからなくて困っています。 できれば、一般的なSQL文(SQL92)でお願いします。 テーブルは、下記の2つです。 -------------------------------------------- ・t_売上明細  売上日  得意先コード  商品コード  売上金額 ・t_商品マスタ  商品コード  仕入単価 <出力>====================================== 得意先コード, 売上合計,商品コード,仕入額合計 -------------------------------------------- C3 \300100    A08 \32500     A04 \31000     ~~~    A10 \30000(Top10) C2 \200200    A05 \22500    A04 \21000     ~~~     A10 \20000(Top10) ~~~ ~~~ C10 \1000(Top10)    A97 \500    A14 \100    ~~~    A96 \10(Top10) ================================

  • 1つのSQLで2段階の抽出を行いたい

    恐らくそれほど複雑なSQLではないと思いますが、中々SQLが作成できず困っています。 回答いただければ嬉しいです。 以下のテーブルがあったと仮定します。 テーブル名:  売上げ明細 カラム:  ・商品ID … 売上げ明細なので一意ではありません  ・単価 … 同じ商品IDでも、レコードによって単価は異なります  ・数量 … 1~5の整数のみとします 実際のデータは以下の通りです。 商品ID,単価,数量 1001,50,2 1001,60,5 1002,90,3 1003,60,5 1003,80,4 1003,90,1 1004,60,3 上記データを以下の通り抽出するには、どのようなSQLを組めばいいでしょうか? 1.まず各商品IDの中から単価が最大のレコードだけを取り出す 商品ID,単価,数量 1001,60,5 1002,90,3 1003,90,1 1004,60,3 2.次に数量でgroup by して、件数をカウントする 数量,件数 1,1 3,2 5,1 1つのSQL文で2の結果が得られれば、途中の抽出条件は特に問いません。 ちなみにMySQL5を使っています。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQL文の長さの制限

    VB+ODBC3.51+Mysql4.1でアプリケーションを作成しているのですが、SQL文の長さの制限は、無いのでしょうか? 何バイトまでという制限があれば、気をつけて作らないといけないかなぁと思っています。(今も、数KBぐらいのものはあります) よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHP+mysqlでSQL文に文字数制限はありますか?

    基本的な質問で申し訳ありません。 $sql="......";にSQL文を書き $rst = mysql_query($sql,$con); $col = mysql_fetch_array($rst); として($conはmysql_connect関数の結果です) WEBを作成しているのですが、ある程度以上長いSQL文を書くと正常に作動しません。(短いSQLであれば正常に差作動します。)  当然SQL文自体もmysqlで直接実行すると作動するものです。SQL文自体がUNIONや副問い合わせを多用し250行程度になってしまったためかと考えていますが、文字数制限等があるのでしょうか?PHPには変数宣言が無いと認識しているのでどう対処して良いかわかりません。 SQLを分解できないとすると何か良い方法はありますでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP