大きな MySQL DDBB があり、いくつかの計算と集計を行う必要があります。「thebigtable」と呼ばれるテーブルの 1 つがさまざまな情報を取得し、一部の計算が異なる情報を取得するとします。
「thebigtable」の例を使用してみましょう。
+-----+-----------+------------+---------+
| id | secondid | date | value |
+-----+-----------+------------+---------+
| 001 | AAA1 | 2010-01-01 | 1000.00 |
| 001 | AAA1 | 2010-02-01 | 1000.00 |
| 001 | AAA1 | 2010-03-01 | 1000.00 |
| 001 | AAA1 | 2010-04-01 | 1000.00 |
| 001 | AAA1 | 2010-05-01 | 1000.00 |
| 001 | AAA1 | 2010-06-01 | 1000.00 |
| 001 | AAA1 | 2010-07-01 | 1000.00 |
| 001 | AAA1 | 2010-08-01 | 1000.00 |
| 001 | AAA1 | 2010-09-01 | 1000.00 |
| 001 | AAA1 | 2010-10-01 | 1000.00 |
| 001 | AAA1 | 2010-11-01 | 1000.00 |
| 001 | AAA1 | 2010-12-01 | 1000.00 |
+-----+-----------+------------+---------+
| 001 | AAA2 | 2010-01-01 | 1000.00 |
| 001 | AAA2 | 2010-02-01 | 1000.00 |
| 001 | AAA2 | 2010-03-01 | 1000.00 |
| 001 | AAA2 | 2010-04-01 | 1000.00 |
| 001 | AAA2 | 2010-05-01 | 1000.00 |
| 001 | AAA2 | 2010-06-01 | 1000.00 |
| 001 | AAA2 | 2010-07-01 | 1000.00 |
| 001 | AAA2 | 2010-08-01 | 1000.00 |
| 001 | AAA2 | 2010-09-01 | 1000.00 |
| 001 | AAA2 | 2010-10-01 | 1000.00 |
| 001 | AAA2 | 2010-11-01 | 1000.00 |
| 001 | AAA2 | 2010-12-01 | 1000.00 |
+-----+-----------+------------+---------+
| 002 | AAA1 | 2010-01-01 | 1000.00 |
| 002 | AAA1 | 2010-02-01 | 1000.00 |
| 002 | AAA1 | 2010-03-01 | 1000.00 |
| 002 | AAA1 | 2010-04-01 | 1000.00 |
| 002 | AAA1 | 2010-05-01 | 1000.00 |
| 002 | AAA1 | 2010-06-01 | 1000.00 |
| 002 | AAA1 | 2010-07-01 | 1000.00 |
| 002 | AAA1 | 2010-08-01 | 1000.00 |
| 002 | AAA1 | 2010-09-01 | 1000.00 |
| 002 | AAA1 | 2010-10-01 | 1000.00 |
| 002 | AAA1 | 2010-11-01 | 1000.00 |
| 002 | AAA1 | 2010-12-01 | 1000.00 |
+-----+-----------+------------+---------+
| 002 | AAA2 | 2010-01-01 | 1000.00 |
| 002 | AAA2 | 2010-02-01 | 1000.00 |
| 002 | AAA2 | 2010-03-01 | 1000.00 |
| 002 | AAA2 | 2010-04-01 | 1000.00 |
| 002 | AAA2 | 2010-05-01 | 1000.00 |
| 002 | AAA2 | 2010-06-01 | 1000.00 |
| 002 | AAA2 | 2010-07-01 | 1000.00 |
| 002 | AAA2 | 2010-08-01 | 1000.00 |
| 002 | AAA2 | 2010-09-01 | 1000.00 |
| 002 | AAA2 | 2010-10-01 | 1000.00 |
| 002 | AAA2 | 2010-11-01 | 1000.00 |
| 002 | AAA2 | 2010-12-01 | 1000.00 |
+-----+-----------+------------+---------+
Ok。実行する必要がある QUERIES を設定しましょう。最初のものは、日付が月 08 から 10 であるという条件で、「id」ごとに異なる「secondid」の数を計算します。
> SELECT id, COUNT(secondid) FROM thebigtable WHERE (date >= '2010-08-01') and (date <= '2010-10-01') GROUP BY id;
結果は次のようになります。
+-----+-----------------+
| id | count(secondid) |
+-----+-----------------+
| 001 | 2 |
| 002 | 2 |
+-----+-----------------+
2 番目のクエリは、日付が月 08 であるという条件で、各 ID の値の合計を計算する必要があります。
> SELECT id, SUM(value) FROM thebigtable WHERE (date LIKE '2010-08-01') GROUP BY secondid;
結果は次のようになります。
+-----+-------------+
| id | sum(values) |
+-----+-------------+
| 001 | 2000.00 |
| 002 | 2000.00 |
+-----+-------------+
1 つの結果だけで両方の SELECT を表示したい、つまり:
+-----+-----------------+-------------+
| id | count(secondid) | sum(values) |
+-----+-----------------+-------------+
| 001 | 2 | 2000.00 |
| 002 | 2 | 2000.00 |
+-----+-----------------+-------------+
ビューを作成してから結合しようとしたり、両方の SELECT の UNION を作成しようとしましたが、どれも機能しません。
何か助けはありますか?