数据库:mysql
> ver 5.0
table 1: type_id (int), type
table 2: name_id, name, is_same_as = table2.name_id or NULL
table 3: id, table2.name_id, table1.type_id, value (float)
我想对table 3
中的值进行求和,并计算table2.name_id
相同的值,并将id
的值包含在is_same_is=name_id
中。我想在table3
中为table2
中的所有值选择所有数据。
如果我的问题不是很清楚,如果已经得到回答但我无法找到相关答案,请道歉。或者不知道该找什么。
[data]. table1
id | type
=========
1 | test1
2 | test2
[data].table2
name_id | name | is_same_as
==============================
1 | tb_1 | NULL
2 | tb_2 | 1
3 | tb_3 | NULL
4 | tb_4 | 1
[data].table3
id | name_id | type_id | value
======================================
1 | 1 | 1 | 1.5
2 | 2 | 1 | 0.5
3 | 2 | 2 | 1.0
output:
name_id| type_id|SUM(value)
=======================================================
1 | 1 |2.0 < because in table2, is_same_as = 1
2 | 2 |1.0
答案 0 :(得分:0)
我认为以下是您想要的:
select coalesce(t2.is_same_as, t2.name_id) as name_id, t3.type_id, sum(value)
from table_3 t3 join
table_2 t2
on t3.name_id = t2.name_id
group by coalesce(t2.is_same_as, t2.name_id), t3.type_id
order by 1, 2
它加入了name_id
的表格。但是,它会使用is_same_as
列(如果存在)或name_id
(如果不存在)来汇总数据。
答案 1 :(得分:0)
这可能就是你要找的东西:(我没有在MySQL中测试它,所以可能会有拼写错误)
with combined_names_tab (name_id, name_id_ref) as
(
select name_id, name_id from table2
union select t2a.name_id, t2b.name_id
from table2 t2a
join table2 t2b
on (t2a.name_id = t2b.is_same_as)
)
select cnt.name_id, t3.type_id, sum(t3.value) sum_val
from combined_names_tab cnt
join table3 t3
on ( cnt.name_id_ref = t3.name_id )
group by cnt.name_id, t3.type_id
having sum(t3.value) / count(t3.value) >= 3
以下是查询的作用:
首先,它创建'combined_names_tab',它是您想要GROUP BY的所有table2行的连接,使用“is_same_as”列来进行该确定。我确保通过UNION包含“父”行。
其次,一旦你上面有这些行,它就是一个简单的连接到table3的GROUP BY和SUM。
注意:table1是不必要的(我相信)。
让我知道这是否有效!
...约翰