根据订单表和这些订单中的相关项目表,我需要找到每种可能的SKU组合的订单数量。我在Magento中这样做,但这只是一个SQL问题,因为我直接在数据库级别工作。
以下是每个表格的相关部分:
sales_flat_order
| entity_id | int(10) unsigned | -- primary key
sales_flat_order_item
| order_id | int(10) unsigned | -- foreign key to order table's entity_id
| sku | varchar(255) |
我已经能够使用子查询和MySQL GROUP_CONCAT
函数来提取我想要的数据,但我想知道是否有一种方法可以更有效地执行此操作和/或没有专有功能。这就是我目前所拥有的:
SELECT skulist, COUNT(skulist)
FROM (
SELECT GROUP_CONCAT(DISTINCT sku ORDER BY sku) skulist
FROM sales_flat_order orders
JOIN sales_flat_order_item items ON orders.entity_id = items.order_id
GROUP BY order_id
) skulists
GROUP BY skulist;
有没有更好的方法呢?
答案 0 :(得分:1)
join
:来提高查询效率
SELECT skulist, COUNT(skulist)
FROM (SELECT GROUP_CONCAT(DISTINCT sku ORDER BY sku) as skulist
FROM sales_flat_order_item items
GROUP BY order_id
) skulists
GROUP BY skulist;
至于不使用特定于数据库的功能。这很难。大多数数据库都有办法group_concat(distinct . . .)
。据我所知,没有两个以同样的方式做(好吧,不是真的,因为Postgres派生的数据库使用相同的语法,但足够接近)。
在标准SQL中,您可以轻松找到给定 n 的 n 项的所有排列。但是,我无法想出以独立于数据库的方式为所有组合执行此操作的方法。