Tai*_*mar 5 mysql sql group-by average sum
我试图平均某些特定行的值,但总计所有行的总和.
我有2个表,一个叫exchanges,另一个叫valid_country.
交流
+-----------+----------+--------------+----------+--------+
| id | ref | country | value | volume |
+-----------+----------+--------------+----------+--------+
| 1 | 1029 | DE | 1 000 | 100 |
+-----------+----------+--------------+----------+--------+
| 2 | 1029 | US | 2 000 | 250 |
+-----------+----------+--------------+----------+--------+
| 3 | 1029 | FR | 3 500 | 300 |
+-----------+----------+--------------+----------+--------+
| 4 | 1053 | UK | 1 200 | 110 |
+-----------+----------+--------------+----------+--------+
| 5 | 1029 | RU | 900 | 70 |
+-----------+----------+--------------+----------+--------+
Run Code Online (Sandbox Code Playgroud)
此表包含许多引用(ref),它们具有不同的国家/地区,它们本身具有不同的值和数量.
valid_country
+--------------+--------------+
| ref | country |
+--------------+--------------+
| 1029 | US |
+--------------+--------------+
| 1029 | RU |
+--------------+--------------+
| 1053 | UK |
+--------------+--------------+
Run Code Online (Sandbox Code Playgroud)
此表列出了可以对其值进行平均的所有"好"国家/地区.
+----------+------------+-------------+
| ref | AVG(value) | SUM(volume) |
+----------+------------+-------------+
| 1029 | 1 450 | 720 |
+----------+------------+-------------+
| 1053 | 1 200 | 110 |
+----------+------------+-------------+
Run Code Online (Sandbox Code Playgroud)
首先是参考GROUP BY.Ref 1029 AVERAGE仅为US和RU的值(因为表valid_country),但是SUM所有国家的数量.Ref 1053也是如此,但由于只有一行很容易.
这是一个小小提琴.SQL请求是错误的,因为它平均所有国家而不仅是好国家.
我认为比较valid_country需要同时使用refand country:
SELECT e.ref,
AVG(CASE WHEN vc.country IS NOT NULL THEN e.value END) AS average,
SUM(e.volume) AS volume
FROM exchanges e LEFT JOIN
valid_country vc
ON vc.country = e.country AND vc.ref = e.ref
GROUP BY e.ref;
Run Code Online (Sandbox Code Playgroud)
这对于您的示例数据并不重要,但对于更大的问题可能很重要。