[英]SUM of a quantity column when using INNER JOIN and distinct/group by
我有这个 MySQL 查询:
SELECT DISTINCT( rentals.order_item_id ), reserved_date, product_id, quantity, order_id FROM `test_rentals` as rentals
INNER JOIN `test_orderitemmeta` as orderitemmeta
WHERE `reserved_date` = '2020-07-07'
AND `product_id` = 109
AND orderitemmeta.meta_key = 'returned'
AND orderitemmeta.meta_value = 'yes'
这将返回:
order_item_id | 保留日期 | 产品编号 | 数量 | order_id |
---|---|---|---|---|
134 | 2020-07-07 | 109 | 1个 | 274 |
138 | 2020-07-07 | 109 | 1个 | 276 |
test_orderitemmeta
表包含一个唯一的meta_id
、 order_item_id
、 meta_key
和meta_value
,可以有多行具有相同的 order_item_id , rentals 表只有order_item_id
列来加入这些。
我希望返回单行显示保留日期、产品 ID 和总数量,我想我可以通过使用SUM( quantity )
来做到这一点,但这给出了结果:
order_item_id | 保留日期 | 产品编号 | SUM(数量) | order_id |
---|---|---|---|---|
134 | 2020-07-07 | 109 | 16 | 274 |
我认为这是在使用DISTINCT
之前可用的总行数?
我还考虑过删除DISTINCT( rentals.order_item_id )
并在查询末尾使用GROUP BY rentals.order_item_id
但这也没有给出我正在寻找的结果。
我怎样才能得到这样的总数量的单行结果:
保留日期 | 产品编号 | 数量 |
---|---|---|
2020-07-07 | 109 | 2个 |
我认为这将为您提供所需的结果:
SELECT reserved_date, product_id, SUM(quantity) as quantity
FROM `test_rentals` as rentals, `test_orderitemmeta` as orderitemmeta
WHERE `reserved_date` = '2020-07-07'
AND `product_id` = 109
AND orderitemmeta.meta_key = 'returned'
AND orderitemmeta.meta_value = 'yes'
GROUP BY reserved_date, product_id
DISTINCT
不是 function,它是SELECT
子句的修饰符,适用于整行(否则没有意义)。 它在这里没有帮助。
没有条件的JOIN
( ON...
) 生成第一个表中的行与第二个表中的行的所有组合。 您需要一个条件来仅组合两个表中的相关行(即属于所需租金的元数据行)。
假设表test_orderitemmeta
包含一个名为rental_id
的列,它将元数据记录链接到拥有元数据的租赁记录,生成您期望的结果的查询如下所示:
SELECT r.reserved_date, r.product_id, SUM(r.quantity) AS quantity
FROM test_rentals AS r
INNER JOIN test_orderitemmeta AS m ON r.rental_id = m.rental_id
WHERE r.reserved_date = '2020-07-07'
AND r.product_id = 109
AND m.meta_key = 'returned'
AND m.meta_value = 'yes'
GROUP BY r.product_id, r.reserved_date
将rental_id
替换为表中的正确列名。
您将尝试使用此代码获取所需的结果:
SELECT rentals.*, orderitemmeta.reserved_date, orderitemmeta.product_id, SUM(orderitemmeta.quantity) as quantity
FROM `test_rentals` as rentals JOIN test_orderitemmeta as orderitemmeta on orderitemmeta.product_id = rentals.order_item_id
WHERE orderitemmeta.reserved_date = '2020-07-07'
AND orderitemmeta.product_id = 109
AND orderitemmeta.meta_key = 'returned'
AND orderitemmeta.meta_value = 'yes'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.