【问题标题】:MySQL SUM() Subquery with MIN()MySQL SUM() 带有 MIN() 的子查询
【发布时间】:2012-01-01 08:20:00
【问题描述】:

首先我要完成的是:

获取etp_product.priceoption_price 的总和。

SELECT 
  etp_product.product_id,
  etp_product.price,
  (SELECT MIN(price) AS FIELD_2 FROM etp_product_option_value pov WHERE pov.product_id = etp_product.product_id) AS option_price
FROM
  etp_product
GROUP BY
  etp_product.product_id,
  etp_product.price

我试过这个:

SELECT 
  etp_product.product_id,
  etp_product.price,
  (SELECT MIN(price) AS FIELD_2 FROM etp_product_option_value pov WHERE pov.product_id = etp_product.product_id) AS option_price,
SUM(etp_product.price + option_price) AS Total
FROM
  etp_product
GROUP BY
  etp_product.product_id,
  etp_product.price

但是得到这个错误:

“字段列表”中的未知列“option_price”

你知道怎么做吗?

【问题讨论】:

  • 唯一可以在其自己的 select 语句中引用别名的时间是“排序依据”。否则,您必须像 Bert Evans 的回答一样再次执行计算。

标签: mysql sum min


【解决方案1】:
SELECT 
  p.product_id,
  p.price,
  IFNULL(MIN(pv.price), 0) as option_price,
  (p.price + IFNULL(MIN(pv.price), 0)) as total
FROM etp_product p
JOIN etp_product_option_value pv ON WHERE pv.product_id = p.product_id
GROUP BY
  p.product_id,
  p.price

【讨论】:

  • JOIN 实际上总是比 SELECT 中的子查询好!
【解决方案2】:
SELECT 
etp_product.product_id,
  etp_product.price,
  (SELECT MIN(price) AS FIELD_2 FROM etp_product_option_value pov WHERE pov.product_id = etp_product.product_id) AS option_price,
 etp_product.price + (SELECT MIN(price) AS FIELD_3 FROM etp_product_option_value pov WHERE pov.product_id = etp_product.product_id) AS Total
FROM
  etp_product
GROUP BY
  etp_product.product_id,
  etp_product.price

【讨论】:

  • 感谢您的快速回答......它确实有效,但我从 etp_product_option_value 得到了一些 NULL 结果。有时我有选择权,有时我没有。
  • 那么,在某些情况下,etp_product_option_value 与 product_id 不匹配?在这些情况下查询是否有意义?
  • ifnull 会做这件事! ifnull(MIN(price), '0') 谢谢伯特!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多