初投稿です。現在、次のようなテーブルが既に存在している状態だとします。(便宜上非正規形にしています)
<注文>
注文番号 (PK), 担当者, 売り上げ
1, 田中, ¥2,000
2, 山田, ¥3,000
ここで、¥4,000 の佐藤さんと山田さんで担当を行った注文3が入り、売り上げを2人で半分ずつ分ける必要が生じたとします。
(注文を分割してあたかも佐藤さんと山田さんそれぞれに注文があったように見せかけるのはできないものとします)
同じ注文に対して2人以上の担当をつけられないため、次のように構成を拡張しました。
<注文>
注文番号 (PK), 売り上げ
1, ¥2,000
2, ¥3,000
3, ¥4,000
<売り上げ>
注文番号 (PK), 担当者 (PK), 重み
1, 田中, 100%
2, 山田, 100%
3, 佐藤, 50%
3, 山田, 50%
ですが、今度は SQL の SUM 句で担当者ごとの売り上げ集計ができなくなってしまいました。
例えば山田さんは注文2の ¥3,000 と注文3の ¥4,000 × 50% の ¥2,000 を合計して
売り上げ ¥5,000 と出したいのですが、このような重み付けを加味した集計を SQL クエリだけで行うことは可能でしょうか?
比較的環境を選ばない方法を書きますが、環境によって全角文字はそのままでは使えない場合(`や"で囲む必要があったりします)もあります
SELECT 売り上げ.担当者, SUM(注文.売り上げ * 売り上げ.重み) AS 売り上げ FROM 売り上げ LEFT JOIN 注文 ON 注文.注文番号 = 売り上げ.注文番号 GROUP BY 売り上げ.担当者
売り上げテーブルの重みフィールドは50%などの文字列ではなく0.5といった数値が入っているものとしています
SQLは完全な共通語ではなくRDBMSによって大きな違いがあったりもしますので、SQLとせずに必ずRDBMS名(MySQL?PostgreSQL?Access?SQLServer?ORACLE?・・・?)とバージョンを記述するクセをつけておくようにしましょう
また、人力検索で質問する際には「回答受付中もコメント・トラックバックを表示する」の欄にチェックを入れておくと細かなやりとりが出来て便利なので、出来ればチェックを入れておいてください
↓こんなテーブルがある感じですよね
# SELECT * FROM 注文; 注文番号 | 売り上げ ----------+---------- 1 | 2000 2 | 3000 3 | 4000 (3 rows) # SELECT * FROM 売り上げ; 注文番号 | 担当者 | 重み ----------+--------+------ 1 | 田中 | 1 2 | 山田 | 1 3 | 佐藤 | 0.5 3 | 山田 | 0.5 (4 rows)
↓これでどうでしょう?
# SELECT 担当者, SUM(売り上げ * 重み) FROM 売り上げ, 注文 WHERE 売り上げ.注文番号 = 注文.注文番号 GROUP BY 担当者; 担当者 | sum --------+------ 山田 | 5000 佐藤 | 2000 田中 | 2000 (3 rows)
SUM 句内で乗算を使用することができたんですね…参考になります。
SQL は他の言語に比べて「そんな書き方できるんだ!」っていうことが多くて大変です。。
回答ありがとうございました!
比較的環境を選ばない方法を書きますが、環境によって全角文字はそのままでは使えない場合(`や"で囲む必要があったりします)もあります
SELECT 売り上げ.担当者, SUM(注文.売り上げ * 売り上げ.重み) AS 売り上げ FROM 売り上げ LEFT JOIN 注文 ON 注文.注文番号 = 売り上げ.注文番号 GROUP BY 売り上げ.担当者
売り上げテーブルの重みフィールドは50%などの文字列ではなく0.5といった数値が入っているものとしています
SQLは完全な共通語ではなくRDBMSによって大きな違いがあったりもしますので、SQLとせずに必ずRDBMS名(MySQL?PostgreSQL?Access?SQLServer?ORACLE?・・・?)とバージョンを記述するクセをつけておくようにしましょう
また、人力検索で質問する際には「回答受付中もコメント・トラックバックを表示する」の欄にチェックを入れておくと細かなやりとりが出来て便利なので、出来ればチェックを入れておいてください
SUM 句で乗算は利用できたんですね。なるほど。
SQL 環境の記述については、個人的に使っている MySQL と仕事の SQL Server が使えるため、
できるだけ環境に依存しない方法が知りたかったので、あえて曖昧にしたのですが、だったらそう書いておくべきでしたね。
あと、今からでも設定を変更できたので、「回答受付中もコメント・トラックバックを表示する」のチェックを入れておきました。
まだ人力はてな初心者でよくわからないことも多いですので、調べてみることにします!
親切なアドバイス・回答ありがとうございました!
SUM 句で乗算は利用できたんですね。なるほど。
SQL 環境の記述については、個人的に使っている MySQL と仕事の SQL Server が使えるため、
できるだけ環境に依存しない方法が知りたかったので、あえて曖昧にしたのですが、だったらそう書いておくべきでしたね。
あと、今からでも設定を変更できたので、「回答受付中もコメント・トラックバックを表示する」のチェックを入れておきました。
まだ人力はてな初心者でよくわからないことも多いですので、調べてみることにします!
親切なアドバイス・回答ありがとうございました!