我有以下选择语句:
SELECT
items.id,
items.name AS item_name,
items.tobuy,
items.list_id,
items.note,
items.unit,
MIN(NULLIF(packages.ppu, 0)) AS mppu,
packages.price AS mprice,
items._deleted
FROM
items
INNER JOIN
lists ON lists.id = items.list_id
LEFT JOIN
packages ON items.id = packages.item_id
WHERE
lists.user_id = 1 AND
items._deleted = '0'
GROUP BY
items.id
ORDER BY
tobuy DESC,
item_name
但是我真正想要的是价格来自具有最小ppu的包装(不一定是具有最小价格的包装)。
有任何想法吗?
样本记录:
表:项目:
id, name, tobuy, list_id, note, unit, _deleted
95, test1, 1, 1, null, null, 0
69, test2, 1, 1, null, null, 0
194, test3, 1, 1, null, null, 0
162, test4, 1, 1, null, null, 0
表:列表:
id, name, user_id
1, list1, 1
表:软件包:
id, item_id, price, ppu
392, 95, 0, 0
117, 95, 13.49, 0.078
391, 95, 0, 0
386, 69, 0, 0
387, 69, 0, 0
388, 69, 0, 0
368, 194, 4.58, 0.138
18, 194, 3.38, 0.177
17, 194, 3.88, 0.144
结果应为包含以下信息的四个项目:
id, item_name, tobuy, list_id, note, unit, mppu, mprice, _deleted
95, test1, 1, 1, null, null, 0.078, 13.49, 0
69, test2, 1, 1, null, null, 0, 0, 0
194, test3, 1, 1, null, null, 0.138, 4.58, 0
162, test4, 1, 1, null, null, 0, 0, 0
请注意,项目162没有任何相应的程序包,但仍显示在列表中。这就是“ LEFT JOIN”的原因
顺便说一句,“ mppu”代表“最低单位价格”
以下工作可以得到我想要的结果。
SELECT * FROM (
SELECT
items.id,
items.name AS item_name,
items.tobuy,
items.list_id,
items.note,
items.unit,
NULLIF(packages.ppu, 0) AS mppu,
packages.price AS mprice,
items._deleted
FROM
items
INNER JOIN
lists ON lists.id = items.list_id
AND lists.user_id = 1
LEFT JOIN
packages ON packages.item_id = items.id
WHERE
items._deleted = '0'
ORDER BY
tobuy DESC,
item_name,
IFNULL(mppu, 999999)) x
GROUP BY
x.id
ORDER BY
tobuy DESC,
item_name
感谢大家提供的帮助,以帮助我完成此任务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句