0

「saldos_one」と「saldos_two」の 2 つのテーブルがあり、両方のテーブルに次のフィールドがあります: CLIENTID、DATE、VALUE。

一定期間、各 CLIENTID の算術平均から TOTAL 算術平均を取得する必要があります。

いくつかの例を見てみましょう:

> SELECT * FROM saldos_one;
+----------+------------+---------+
| CLIENTID | DATE       | VALUE   |
+----------+------------+---------+
| 1        | 2009-08-01 | 1000.00 |
| 1        | 2009-09-01 | 2000.00 |
| 1        | 2009-10-01 | 3000.00 |
| 2        | 2009-08-01 | 1000.00 |
| 2        | 2009-09-01 | 2000.00 |
| 2        | 2009-10-01 | 3000.00 |
| 3        | 2009-08-01 | 1000.00 |
| 3        | 2009-09-01 | 2000.00 |
| 3        | 2009-10-01 | 3000.00 |
| 4        | 2009-08-01 | 1000.00 |
| 4        | 2009-09-01 | 2000.00 |
| 4        | 2009-10-01 | 3000.00 |
+----------+------------+---------+

> SELECT * FROM saldos_two;
+----------+------------+---------+
| CLIENTID | DATE       | VALUE   |
+----------+------------+---------+
| 1        | 2009-08-01 | 10.00   |
| 1        | 2009-09-01 | 20.00   |
| 1        | 2009-10-01 | 30.00   |
| 2        | 2009-08-01 | 100.00  |
| 2        | 2009-09-01 | 200.00  |
| 2        | 2009-10-01 | 300.00  |
| 3        | 2009-08-01 | 1000.00 |
| 3        | 2009-09-01 | 2000.00 |
| 3        | 2009-10-01 | 3000.00 |
| 5        | 2009-08-01 | 1.00    |
| 5        | 2009-09-01 | 2.00    |
| 5        | 2009-10-01 | 3.00    |
+----------+------------+---------+

各テーブルの QUERY 算術平均の後:

> SELECT CLIENTID, TRUNCATE(SUM(VALUE)/COUNT(VALUE), 2) 
FROM saldos_one 
WHERE (DATE BETWEEN '2009-08-01' AND '2009-10-01')
GROUP BY CLIENTID;
+----------+---------+
| CLIENTID | VALUE   |
+----------+---------+
| 1        | 2000.00 |
| 2        | 2000.00 |
| 3        | 2000.00 |
| 4        | 2000.00 |
+----------+---------+

> SELECT CLIENTID, TRUNCATE(SUM(VALUE)/COUNT(VALUE), 2) 
FROM saldos_two
WHERE (DATE BETWEEN '2009-08-01' AND '2009-10-01')
GROUP BY CLIENTID;
+----------+---------+
| CLIENTID | VALUE   |
+----------+---------+
| 1        | 20.00   |
| 2        | 200.00  |
| 3        | 2000.00 |
| 5        | 2.00    |
+----------+---------+

私が取得したいのは、さまざまなテーブルの算術平均からの各クライアントの算術平均です。次のようになります。

+----------+---------+
| CLIENTID | VALUE   |
+----------+---------+
| 1        | 1010.00 | = 2000.00 + 20.00 / 2
| 2        | 200.00  | = 200.00 + 200.00 / 2
| 3        | 2000.00 | = 2000.00 + 2000.00 / 2
| 4        | 1000.00 | = 2000.00 + 0 / 2
| 5        | 1.00    | = 2.00 + 0 / 2
+----------+---------+

解決策: @bvr の応答を参照してください

4

4 に答える 4

3

これを試して

SELECT CLIENTID,SUM(VALUE)/2 VALUE FROM
(
    SELECT CLIENTID, TRUNCATE(SUM(VALUE)/COUNT(VALUE), 2) VALUE 
    FROM saldos_one 
    WHERE (DATE BETWEEN '2009-08-01' AND '2009-10-01')
    GROUP BY CLIENTID;
    UNION ALL
    SELECT CLIENTID, TRUNCATE(SUM(VALUE)/COUNT(VALUE), 2) VALUE
    FROM saldos_two
    WHERE (DATE BETWEEN '2009-08-01' AND '2009-10-01')
) t
 GROUP BY CLIENTID
于 2013-08-27T10:04:45.470 に答える
0

SUM(VALUE)/COUNT(VALUE) の代わりに AVG 関数を使用できます。

質問の最後の部分について:

2 つのクエリの結果を一時テーブルに入れ、AVG 関数を使用して同じクエリを一時テーブルに適用できるため、2 つの値 (2000 と 20) の平均を適用します。

そして、テーブルのすべての行

于 2013-08-27T10:02:40.127 に答える