Mysql 如何平均最近5笔交易的最后金额
我有两个事务表和一个产品表。product表有一个名为product的列。事务表有一个名为amount的列。我想得到每种产品最后5笔交易的平均值。到目前为止,我已经有了这一点,但无法找到一个声明来让它抓住每个不同产品的最后5个:Mysql 如何平均最近5笔交易的最后金额,mysql,limit,Mysql,Limit,我有两个事务表和一个产品表。product表有一个名为product的列。事务表有一个名为amount的列。我想得到每种产品最后5笔交易的平均值。到目前为止,我已经有了这一点,但无法找到一个声明来让它抓住每个不同产品的最后5个: SELECT avg(amount) as price, p.product_name, p.producer FROM wp_transactions t JOIN wp_products p ON t.product_ID = p.ID WHERE t.status
SELECT avg(amount) as price, p.product_name, p.producer
FROM wp_transactions t
JOIN wp_products p
ON t.product_ID = p.ID
WHERE t.status = 'approved'
GROUP BY p.product_name
ORDER BY p.producer ASC, p.product_name ASC;
可以通过使用变量枚举行来完成此操作:
SELECT avg(amount) as price, p.product_name, p.producer
FROM (SELECT t.*,
(@rn := if(@p = t.Product_Id, @rn + 1,
if(@pr := t.Product_Id, 1, 1)
)
) as seqnum
FROM wp_transactions t CROSS JOIN
(SELECT @rn := 0, @p := 0) vars
WHERE t.status = 'approved'
ORDER BY t.product_ID, t.datetime
) t JOIN
wp_products p
ON t.product_ID = p.ID
WHERE seqnum <= 5
GROUP BY p.product_name
ORDER BY p.producer ASC, p.product_name ASC;
可以通过使用变量枚举行来完成此操作:
SELECT avg(amount) as price, p.product_name, p.producer
FROM (SELECT t.*,
(@rn := if(@p = t.Product_Id, @rn + 1,
if(@pr := t.Product_Id, 1, 1)
)
) as seqnum
FROM wp_transactions t CROSS JOIN
(SELECT @rn := 0, @p := 0) vars
WHERE t.status = 'approved'
ORDER BY t.product_ID, t.datetime
) t JOIN
wp_products p
ON t.product_ID = p.ID
WHERE seqnum <= 5
GROUP BY p.product_name
ORDER BY p.producer ASC, p.product_name ASC;
可以通过使用变量枚举行来完成此操作:
SELECT avg(amount) as price, p.product_name, p.producer
FROM (SELECT t.*,
(@rn := if(@p = t.Product_Id, @rn + 1,
if(@pr := t.Product_Id, 1, 1)
)
) as seqnum
FROM wp_transactions t CROSS JOIN
(SELECT @rn := 0, @p := 0) vars
WHERE t.status = 'approved'
ORDER BY t.product_ID, t.datetime
) t JOIN
wp_products p
ON t.product_ID = p.ID
WHERE seqnum <= 5
GROUP BY p.product_name
ORDER BY p.producer ASC, p.product_name ASC;
可以通过使用变量枚举行来完成此操作:
SELECT avg(amount) as price, p.product_name, p.producer
FROM (SELECT t.*,
(@rn := if(@p = t.Product_Id, @rn + 1,
if(@pr := t.Product_Id, 1, 1)
)
) as seqnum
FROM wp_transactions t CROSS JOIN
(SELECT @rn := 0, @p := 0) vars
WHERE t.status = 'approved'
ORDER BY t.product_ID, t.datetime
) t JOIN
wp_products p
ON t.product_ID = p.ID
WHERE seqnum <= 5
GROUP BY p.product_name
ORDER BY p.producer ASC, p.product_name ASC;
出于好奇-如果有seqnum@zerkms,优化不是更容易吗。我认为在MySQL中,这将减少物化子查询的大小,因此效率会更高一些。但是,我不确定having子句如何与group by以及变量交互,因此我不确定这是否真的有效。having节点在group by之后应用,因此对于group by它不存在。因此,使用它的潜在优势在于,如果优化器不够聪明,无法从外部查询中推送谓词,或者反之亦然,那么至少可以减少结果集的物化子查询的大小。我认为在MySQL中,这将减少物化子查询的大小,因此效率会更高一些。但是,我不确定having子句如何与group by以及变量交互,因此我不确定这是否真的有效。having节点在group by之后应用,因此对于group by它不存在。因此,使用它的潜在优势在于,如果优化器不够聪明,无法从外部查询中推送谓词,或者反之亦然,那么至少可以减少结果集的物化子查询的大小。我认为在MySQL中,这将减少物化子查询的大小,因此效率会更高一些。但是,我不确定having子句如何与group by以及变量交互,因此我不确定这是否真的有效。having节点在group by之后应用,因此对于group by它不存在。因此,使用它的潜在优势在于,如果优化器不够聪明,无法从外部查询中推送谓词,或者反之亦然,那么至少可以减少结果集的物化子查询的大小。我认为在MySQL中,这将减少物化子查询的大小,因此效率会更高一些。但是,我不确定having子句如何与group by以及变量交互,因此我不确定这是否真的有效。having节点在group by之后应用,因此对于group by它不存在。因此,使用它的潜在优势在于,如果优化器不够聪明,无法从外部查询中推送谓词,或者反过来推送谓词,那么至少可以减少结果集,从而减小物化子查询的大小。