我有一张桌子
Tid Did value
------------------
1 123 100
1 234 200
2 123 323
2 234 233
所有tid都有did为123和234.所以对于每个有did 123和234的tid,我想要相应值的乘积
输出表将是
Tid Product
------------------
1 20000 (product of 100 and 200)
2 75259 (product of 323 and 233)
任何帮助?
答案 0 :(得分:0)
select tid,
min(case when did = 123 then value end)
* min(case when did = 234 then value end) product
from my_table
group by tid
要合并多个行的数据(基于tid
),请使用GROUP BY
。
由于您按tid
进行分组,因此您必须使用聚合函数对各行中的其他值执行任何操作。如果隐含的假设成立(每个did
每个tid
恰好匹配1行)那么你使用的聚合函数并不重要; min
和任何事情一样好。
在聚合中,您使用CASE
逻辑为所需的value
选择did
(NULL
组中的所有其他行tid
。
然后就算数学。
答案 1 :(得分:0)
您可以使用一些算术来获得每个产品。
select tid,exp(sum(log(value))) as prod
from t
group by tid
要仅对已完成值123和234的tid执行此操作,请使用
select tid,exp(sum(log(value))) as prod
from t
group by tid
having count(distinct case when did in (123,234) then did end) = 2
答案 2 :(得分:0)