【SQL】グループ化した際の最頻値の表示
- SQL Server 2008R2を使用して、販売支店と出身国でグループ化した際に、各グループの値段の合計値と最頻値の車種を表示する方法を教えてください。
- 上記のテーブルを販売支店と出身国でグループ化し、値段の合計値を出力します。また、車種の中で最も頻出した値を表示する方法も教えてください。
- SQL Server 2008R2を使用して、販売支店と出身国でグループ化した際に、各グループの値段の合計値と最頻値の車種を表示する方法を教えてください。最頻値が2つ以上ある場合は、その中からどれか1つを表示します。
- ベストアンサー
【SQL】グループ化した際の最頻値の表示
はじめまして。 現在、私は仕事で統計を表示するためのレポートを作成中ですが、 データ取得SQLのよいアイデアが浮かびません。 わかる方がいらっしゃいましたら、お知恵を貸してください。 booking_id 販売支店 出身国 値段 車種 ---------------------------------------------- 01 東日本 ブラジル 100,000 A 02 東日本 ブラジル 200,000 A 03 東日本 ブラジル 300,000 B 04 東日本 ブラジル 400,000 C 05 東日本 日本 500,000 A 06 東日本 日本 600,000 B 07 西日本 ロシア 700,000 B 08 西日本 ロシア 800,000 B 09 西日本 ロシア 900,000 B 10 西日本 韓国 100,000 A 11 西日本 韓国 200,000 B 12 西日本 韓国 300,000 C 13 西日本 韓国 400,000 C 上記のようなテーブルがある場合、販売支店と出身国でグループ化して、 それぞれの値段の合計値を出します。 その際、車種はもっとも頻出した値を表示したいのですが、 どのようにしたら実現できますでしょうか。 (最頻値が2つ以上の場合は、その中のどれかを表示する。) 期待結果は以下のようになります。 販売支店 出身国 値段 車種 --------------------------------------- 東日本 ブラジル 1000,000 A 東日本 日本 1100,000 A 西日本 ロシア 2400,000 B 西日本 韓国 1000,000 C SQL Server は、2008R2を使用しております。 以上、よろしくお願いいたします。
- losmy
- お礼率100% (1/1)
- SQL Server
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
1) 値段の集計 SELECT 販売支店, 出身国, SUM(値段) AS 値段 FROM テーブル GROUP BY 販売支店, 出身国 ORDER BY 販売支店, 出身国 (2)車種の頻度順 SELECT COUNT(*), 車種 FROM テーブル GROUP BY 車種 ORDER BY COUNT(*) DESC, 車種 (3) 合体 SELECT a.販売支店, a.出身国, SUM(a.値段) AS 値段 , ( SELECT TOP 1 b.車種 FROM テーブル b WHERE b.販売支店 = a.販売支店 AND b.出身国 = a.出身国 GROUP BY b.車種 ORDER BY COUNT(*) DESC, b.車種 ) AS 車種 FROM テーブル a GROUP BY a.販売支店, a.出身国 ORDER BY a.販売支店, a.出身国
関連するQ&A
- SQL文で統計表を作りたい
お世話になります。 SQL文(SQLPLUS)で統計表を作りたいと思っています。 (PL/SQL可) 可能でしょうか? <販売履歴テーブル> 販売店 販売日付 販売時刻 A 2008/05/20 10:00 A 2008/05/20 15:00 A 2008/05/20 18:00 A 2008/05/21 11:00 A 2008/05/21 12:00 A 2008/05/21 15:00 A 2008/05/22 10:00 B 2008/05/20 09:00 B 2008/05/20 11:00 B 2008/05/21 10:00 B 2008/05/21 15:00 B 2008/05/21 17:00 C 2008/05/20 10:00 C 2008/05/20 11:00 C 2008/05/20 14:00 C 2008/05/21 10:00 販売店、販売日付にて件数を一覧表示させたい <SELECT結果> A B C 2008/05/20 3 2 3 2008/05/21 3 3 1 2008/05/22 1 0 0 ちなみにデータベースはOracle10gです。 よろしくお願い致します。
- ベストアンサー
- Oracle
- SQLサーバでテーブルをコピーする
SQLサーバ超初心者です。 A支店用のテーブルを作成(dbo.data_A)したのですが B支店(dbo.data_B)、C支店用(dbo.data_C)のテーブルを作成したいです。 Accessなどのように、コピーペーストなどはできないのですよね? ご教授お願いいたします!
- ベストアンサー
- SQL Server
- 条件文を使ったグループ出力SQL文
SQL初心者です。な~んだこんな事くらいと言わず教えてください。 テーブルに A B C ------------ 5 a b 7 c d 4 a d 5 f b ------------ というデータがあります。 これを Bの列については、aとa以外 Cの列については、bとb以外 というようにグルーピングして、合計値を出したいと思っています。 結果として a b 5 a b以外 4 a以外 b 5 a以外 b以外 7 という形の出力イメージです。 調べてみてcase when文を使えばいいなんてことをなんとなく理解しているのですが、group byと組み合わせてどのようにSQL文を書けばいいかわかりません。 SQL Serverを使っています。ご存知の方、ご教授ください。
- ベストアンサー
- SQL Server
- SQL 繰り返し項目を表示
以下の条件 カラム「C1」が主キーのテーブルがAとB↓ テーブルA C1| --- AA| テーブルB C1|C2| -----| AA|11| AA|22| AA|33| とあった場合に、抽出結果を C1|C2 | ---------| AA|112233| にするためにはどのようなSQLを組めばいいのでしょうか?
- ベストアンサー
- MySQL
- SQLで必要なデータを取り出したい
SQLにて以下のテーブルから必要なデータを取り出したいと思っています。 【支店テーブル:officetbl】 officenumber,officename(支店No,支店名) 001,東京支店 002,大阪支店 【取引先テーブル:partnertbl】 partnernumber,partnername(取引先No,取引先名) P001,A株式会社 P002,B有限会社 【工具テーブル:tooltbl】 partnernumber,toolnumber,toolname(取引先No,工具No,工具名) P001,T00001,工具A P001,T00002,工具B P002,T00003,工具C 【入荷(在庫)テーブル:arrivaltbl】 officenumber,partnernumber,toolnumber,arrival,stock(支店No,取引先No,工具No,入荷日,在庫) 001,P001,T00001,20150101,0 001,P001,T00001,20150110,2 001,P001,T00001,20150115,4 001,P002,T00003,20150120,2 001,P002,T00003,20150125,1 002,P002,T00003,20150105,2 これらのテーブルから、全拠点の場合と東京支店のみの場合、 2つのパターンでデータを取り出したいのですが、 どうSQLを組めば実現できるか分かりません。 【抽出後の結果(1):全拠点の場合】 officename,partnername,toolnumber,toolname,stock(支店名,取引先名,工具No,工具名,在庫) 東京支店,A株式会社,T00001,工具A,6 東京支店,A株式会社,T00002,工具B,0 東京支店,B有限会社,T00003,工具C,3 大阪支店,A株式会社,T00001,工具A,0 大阪支店,A株式会社,T00002,工具B,0 大阪支店,B有限会社,T00003,工具C,2 【抽出後の結果(2):東京支店のみの場合】 officename,partnername,toolnumber,toolname,stock(支店名,取引先名,工具No,工具名,在庫) 東京支店,A株式会社,T00001,工具A,6 東京支店,A株式会社,T00002,工具B,0 東京支店,B有限会社,T00003,工具C,3 どのようにコーディングしたら実現できるか、いろいろSQLを作成していますが、 うまく辿り着かないため、作業が進まなくて困っています。 どのようなSQLでしたら実現できるでしょうか?
- 締切済み
- SQL Server
- SQLについて
以下のSQLを作成したいです。 お助け下さい。 splserver2008 A(親)、B(子)、C(子)のテーブルがあるとします。 親キー:支店CD 子キー:グループCD 1、A、B、Cをジョイン 2、A、Cをジョイン 1、2を一覧表示させたいのですが、重複データは省きたいです。 しかもIs°?TY,T処理が必要な為、一緒に行カウントが必要になります。 これだけではやりたいことが伝わらないかもなので以外の狙いがあります。 A、Bはシステムでデータが作られます。 CはバッチでBのグループCDに向けて郵送が発生した情報を累積します。 上記2の処理は送っては行けないグループCDに送ってないか確認したいです。
- ベストアンサー
- その他(プログラミング・開発)
- GROUP BYを使うのでしょうか?SQL文がわかりません。
以下のようなテーブルで、B社を担当していない人を検索したいのですが、 どのようなSQL文を書けばよいのでしょうか? 氏名 担当会社 -------------- 山田 A社 山田 B社 山田 C社 野村 A社 野村 C社 町田 A社 町田 B社 町田 C社 期待する結果 ----------- 野村 教えて下さい。 どうぞよろしくお願いいたします。
- ベストアンサー
- その他(データベース)
- グループ化した個数をSQL文で書くと・・・
大変、初心者的な質問で申し訳ありません。 下記のようなテーブルがあるとします。 --- 列1 列2 a いも b さくらんぼ a バナナ c りんご a いも --- 列1・列2でグループ化して、列1におけるの"グループの個数"を出したいと思っています。 つまり、結果としては、 a 2 b 1 c 1 という結果を望んでいます。 おそらくSQLを使われている方は非常に簡単だと思いますが、ご存知の方ご教授お願いします。
- ベストアンサー
- SQL Server
- こんなSQL文
Oracle8.1.7を使用しております。 以下のようなテーブルに対し、1行目と2行目を削除するSQL文を書きたいのですが、思いつきません。どなたか、アドバイスいただけないでしょうか? 表名:A B | C ―――――――― 2 | 10 2 | 1 1 | 10 1 | 1 1 | 11 1 | 2 1 | 1 3 | 10 2 | 3 変数として、P1=1とP2=2があります。(これは、SQL文の中に直接書くものとします。) ここで、SELECT B,C FROM A WHERE B=1;とSELECT B,C FROM A WHERE B=2;を実行すると、次のようになります。 B | C B | C ――――――――― ――――――――― 1 | 10 2 | 10 1 | 1 2 | 1 1 | 11 2 | 3 1 | 2 1 | 1 ここで、それぞれの表を見ると、Cの値が一致している部分があります。この一致していて、Bが2の行を削除したいのですが、SQL1文では無理でしょうか? 最近、SQLには慣れてきたつもりだったのですが、こんなとこでつまずくとは・・・どうぞよろしくお願いします。
- ベストアンサー
- その他(データベース)
お礼
実際に試してみたところ、正しい値が得られました。 SELECT 区の中にテーブルを入れてしまう方法は初めて知りました。 とてもシンプルで、わかりやすい説明、ありがとうございました。