[英]Joining table with its self
i have question here... 我在这里有问题...
Table : history
|id |transaction|created_at |merchant_id|
|-----|-----------|-------------------|-----------|
|1 |400 |2015-10-12 11:08:37|33 |
|1 |500 |2015-10-15 09:38:22|33 |
|1 |600 |2015-10-21 14:47:12|22 |
|2 |100 |2015-09-26 10:48:27|31 |
|2 |500 |2015-09-30 11:18:07|27 |
|2 |300 |2015-10-02 17:33:57|31 |
i want when im do query: 我想在即时查询时查询:
SELECT SUM(a.transaction)/COUNT(a.transaction) AS avg_trans
FROM history AS a GROUP BY a.id, a.merchant_id
Result:
|id |avg_trans|merchant_id|
|------|---------|-----------|
|1 |450 |33 |
|1 |600 |22 |
|2 |200 |31 |
|2 |500 |27 |
then show avg_trans into table history, like this : 然后将avg_trans显示到表历史记录中,如下所示:
|id |transaction|created_at |avg_trans|merchant_id|
|-----|-----------|-------------------|---------|-----------|
|1 |400 |2015-10-12 11:08:37|450 |33 |
|1 |500 |2015-10-15 09:38:22|450 |33 |
|1 |600 |2015-10-21 14:47:12|600 |22 |
|2 |100 |2015-09-26 10:48:27|200 |31 |
|2 |200 |2015-09-30 11:18:07|500 |27 |
|2 |300 |2015-10-02 17:33:57|200 |31 |
anyone can help me? 有人可以帮助我吗?
Use a correlated subquery: 使用相关子查询:
select h.*,
(select avg(h2.transaction)
from history h2
where h2.id = h.id
) as avg_trans
from history h;
You can also do this with a group by
. 您也可以与
group by
。 However, the above can take advantage of an index on history(id, transaction)
. 但是,以上内容可以利用
history(id, transaction)
上的索引。 Also note that SQL has the built-in aggregation function AVG()
, so you might as well use it. 还请注意,SQL具有内置的聚合函数
AVG()
,因此您不妨使用它。
The group by
/ join
version looks like: group by
/ join
版本如下:
select h.*, hh.avg_trans
from history h join
(select id, avg(h2.transaction) as avg_trans
from history h2
where h2.id = h.id
) hh
on h.id = hh.id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.