我正在使用三个表,这些表存储销售数据以及项目并添加使用。
销售
sale_id | sale_amount | sale_time
---------------------------------------
1 | 20 | 2016-04-11 11:43:00
2 | 30 | 2016-04-11 11:53:00
Sale_Items,其中使用的附加组件以逗号分隔
sale_item_id | item_id | qty | price | addon_ids
-------------------------------------------------
1 | 1 | 2 | 10 | 3,4
2 | 1 | 3 | 10 | 2,4
项目
item_id | item_name
----------------------
1 | Pizza
2 | Paperoni
3 | Corn
4 | Salami
我想运行查询以获取特定类型的结果,该结果也让我知道所使用的附加项数
item_id | Item Name | qty_sold
------------------------------
1 | Pizza | 5
2 | Paperoni | 3
3 | Corn | 2
4 | Salami | 5
如何通过MySQL查询来做到这一点?
答案 0 :(得分:1)
正确的方式:
规范化您的架构。 addon_ids
不应存储非原子值,尤其是当您想要使用它们时。
解决方法:
SELECT item_id, item_name, SUM(qty) AS qty
FROM (
SELECT i.item_id, i.item_name, SUM(qty) AS qty
FROM Items i
LEFT JOIN Sale_items si
ON i.item_id = si.item_id
GROUP BY i.item_id, i.item_name
UNION ALL
SELECT i.item_id, i.item_name, SUM(qty)
FROM Items i
LEFT JOIN Sale_items si
ON FIND_IN_SET(CAST(i.item_id AS VARCHAR(100)), si.addon_ids) > 0
GROUP BY i.item_id, i.item_name
) AS sub
GROUP BY item_id, item_name;
的 LiveDemo
强>
输出:
╔═════════╦═══════════╦═════╗
║ item_id ║ item_name ║ qty ║
╠═════════╬═══════════╬═════╣
║ 1 ║ Pizza ║ 5 ║
║ 2 ║ Paperoni ║ 3 ║
║ 3 ║ Corn ║ 2 ║
║ 4 ║ Salami ║ 5 ║
╚═════════╩═══════════╩═════╝