【发布时间】:2018-01-09 21:48:02
【问题描述】:
我有三个表都通过“id”列链接。当三个人都加入时,它看起来有点像这样:
+----+-------+--------+-------------------+---------+
| id | Color | T1Data | distinct_value | T3_data |
+----+-------+--------+-------------------+---------+
| 1 | green | ab | A | 10 |
| 1 | green | ab | A | 20 |
| 1 | green | ab | B | 100 |
| 1 | green | ab | B | 200 |
| 2 | blue | xz | A | 30 |
| 2 | blue | xz | A | 40 |
| 2 | blue | xz | B | 300 |
| 2 | blue | xz | B | 400 |
+----+-------+--------+-------------------+---------+
目前我只是 SELECTING 列,平均 (AVG) T3 数据和 GROUP BY 数据前面的每一列:
SELECT T1.id, T1.Color, T1Data, T2.distinct_value, avg(T3_data)
from T1
left join T2 on T1.id = T2.id
left join T3 on (T3.id = T2.id and T3.distinct_value = T2.distinct_value)
group by T1.id, T1.Color, T1.Data, T2.distinct_value
order by T1.id;
这是结果:
+----+-------+--------+-------------------+---------+
| id | Color | T1Data | T2_distinct value | avg |
+----+-------+--------+-------------------+---------+
| 1 | green | ab | A | 15 |
| 1 | green | ab | B | 150 |
| 2 | blue | xz | A | 35 |
| 2 | blue | xz | B | 350 |
+----+-------+--------+-------------------+---------+
这是期望的结果。我想知道是否有更有效的方法来调用聚合数据? Color 和 T1Data 列是字符串,对于相同的 id 都是相同的。 但是,我希望在平均 T3_data 之前的列中没有那么多 group by 语句。有没有办法让group by 和id 和distinct_value 产生相同的输出?
【问题讨论】:
-
嗯,这对我来说看起来不错
标签: mysql aggregate aggregate-functions