プロが教える店舗&オフィスのセキュリティ対策術

はじめまして。

現在、私は仕事で統計を表示するためのレポートを作成中ですが、
データ取得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を使用しております。

以上、よろしくお願いいたします。

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

実際に試してみたところ、正しい値が得られました。
SELECT 区の中にテーブルを入れてしまう方法は初めて知りました。
とてもシンプルで、わかりやすい説明、ありがとうございました。

お礼日時:2013/02/14 06:57

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

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