简体   繁体   English

用自己的桌子

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM