哦,伟大的SQL神我需要你的帮助。
这是我的架构:
CAR(Serial_no,Model,Manufacturer,Price)
OPTIONS(Serial_no,Option_name,Price)
SALE(Salesperson_id,Serial_no,Date,Sale_price)
SALESPERSON(Salesperson_id,Name,Phone)
其次,我需要获取OPTIONS表和SUM类似Serial_no的所有价格,具体如下:
SELECT O.Serial_no,SUM(O.Price) 来自OPTIONS O. GROUP BY(O.Serial_no);
最后我需要合并第一步和第二步并查询结果,这样我得到的结果就是CAR.Price< (SALE.Sale_price + OPTIONS.Price)。
可以这样做吗?任何帮助都会非常感激!
谢谢, 标记
答案 0 :(得分:1)
SELECT C.Serial_no,
MIN(c.Price) CarPrice,
MIN(s.Sale_price) SalePrice,
SUM(o.Price) OptionsPrice,
MIN(s.Sale_price) + IFNULL(SUM(o.Price),0) TotalPrice
FROM Car c JOIN Sale s ON c.Serial_no = s.Serial_no
LEFT JOIN `Options` o ON c.Serial_no = o.Serial_no
GROUP BY c.Serial_no
HAVING MIN(c.Price) < MIN(s.Sale_price) + IFNULL(SUM(o.Price),0)
注意:MIN()
没有带走任何东西,它只是存在,因为你正在分组,而选项表可能有多行。
另一种选择是在子查询中进行计算,这可能会带来更好的性能:
SELECT C.Serial_no,
C.Price,
S.Sale_price,
og.SumPrice
FROM Car c JOIN Sale s ON c.Serial_no = s.Serial_no
LEFT JOIN (
SELECT Serial_no, SUM(Price) SumPrice
FROM `Options`
GROUP BY Serial_no
) og ON c.Serial_no = og.Serial_no
WHERE c.Price < s.Sale_price + IFNULL(og.SumPrice,0)