私は次のようなテーブルがある:条件文と集約
`units`
+----+------+-------+---------------+-------+
| id | tech | jobID | city | units |
+----+------+-------+---------------+-------+
| 1 | 1234 | 8535 | San Jose | 3 |
| 2 | 1234 | 8253 | San Francisco | 4 |
| 3 | 1234 | 2457 | San Francisco | 5 |
| 4 | 1234 | 8351 | Mountain View | 8 |
+----+------+-------+---------------+-------+
といくつかの計算を行うために、このデータを使用するビュー:
`total`
+----+--------+------+-------+
| id | name | tech | total |
+----+--------+------+-------+
| 1 | Dan | 1234 | 12 |
| 2 | Dan SF | 1234 | 12 |
+----+--------+------+-------+ ...
私の問題は、私はということですサンフランシスコで完成したDanのユニット数と彼が他の所で行ったユニットの量を合計しようとしました(SFで何台のユニットが完成したかを具体的に追跡する必要があります)。しかし、私は選択クエリ内でこれを行う方法がわかりません。現在の合計テーブルを見ると、両方の合計値が都市に関係なくすべてのユニットを単純に合計していることがわかります。
私は次のように取得したい:
`total`
+----+--------+------+-------+
| id | name | tech | total |
+----+--------+------+-------+
| 1 | Dan | 1234 | 11 |
| 2 | Dan SF | 1234 | 9 |
+----+--------+------+-------+ ...
私は望ましい結果を得るためにCASEを使用する方法がわからないだから、私は私のSELECTを書いて助けを必要としています。私は、次のことを試してみた:
SELECT otherTable.name AS name, units.tech AS tech,
(CASE WHEN City = 'SAN FRANCISCO' THEN SUM(units)
ELSE SUM(units)
) AS total
FROM units, otherTable
GROUP BY name
が、明らかに私は2つの集合体で都市間の差別はないよので、これは動作しません。
ご協力いただきまして誠にありがとうございます。
EDIT:次のように私の現在のビュー(情報に参加して)のためのSELECTクエリは次のとおりです。otherTableについては
SELECT otherTable.name, units.tech, SUM(units.units)
FROM units
LEFT JOIN otherTable ON otherTable.tech = units.tech
GROUP BY name
、それは単に名前で、各ハイテクIDを関連付ける:
`otherTable`
+----+--------+------+-----------+
| id | name | tech | otherInfo |
+----+--------+------+-----------+
| 1 | Dan | 1234 | ...... |
+----+--------+------+-----------+
を与えるだろう。しかし、あなたのビューのサンプルでは、他の人のための 'サンフランシスコ'と 'ダン'のユーザー 'ダンSF'を表示します。それはどうですか? 2つのテーブルがどのように関連しているかを示してください。ユニットを完成させたのがダンだとどうやって分かりますか? –
申し訳ありませんが、私は参加情報で投稿を更新しました。 – mathmorales
さて、「Dan SF」という名前が作られています。 pgreen2の 'UNION ALL'クエリを使用し、次に調整された結合を使用します。 –