【问题标题】:MySQL: left join only one row and sumMySQL:仅左连接一行并求和
【发布时间】:2018-03-02 13:29:48
【问题描述】:

没有子查询可以只左连接一行吗?

我需要获取产品统计信息,并且某些产品有多个组。 因此,产品数量不正确。

SELECT COUNT(p.id) AS total_product, SUM(p.price) AS total_price
FROM product p
LEFT JOIN attribute_group a ON
a.product_id = p.id
WHERE p.created_at >= "2018-01-01" AND (a.id = 1 OR a.id = 2)
GROUP BY p.id
LIMIT 0, 30;

product
id | price
1 | 100
2 | 150 
3 | 250

attribute_group
id | product_id | title
1 | 1 | a1
2 | 1 | a2
3 | 2 | a3
4 | 3 | a4

应该是:

1| 100

但我明白了:

2 | 200

【问题讨论】:

  • 只需在没有 GROUP BY 的情况下执行 LEFT JOIN,您就会明白会发生什么。
  • 解释你的逻辑。你的问题并没有解释你想要做什么,只是什么不起作用。
  • Gordon Linoff> 我需要获取按价格和属性选择的产品总价。

标签: mysql sql


【解决方案1】:

您似乎想要具有属性 1 和 2 的所有产品或它们的计数/总和。这是一种方法:

SELECT COUNT(*) as num_products, SUM(p.price) as total_price
FROM product p
WHERE p.created_at >= '2018-01-01' AND
      EXISTS (SELECT 1
              FROM attribute_group ag
              WHERE ag.product_id = p.id AND ag.id = 1
             ) AND
      EXISTS (SELECT 1
              FROM attribute_group ag
              WHERE ag.product_id = p.id AND ag.id = 2
             );

【讨论】:

  • 您应该将AND 替换为OR 并添加日期条件
  • @shukshin.ivan 。 . .根据样本数据,and 似乎更合适。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 2015-08-24
相关资源
最近更新 更多