我创建了一堆将产品导入magento的MySQL脚本,我使用GROUP BY将产品分组为可配置产品
在过去,我使用MIN()
来获得组中的最低价格,并将该值用作可配置产品的价格,但是最近有一些像这样的情况
Simple Product ID | Price ($)
------------------------------
1001 | 10
1002 | 10
1003 | 5
1004 | 10
1005 | 20
1006 | 10
在这种情况下,当我创建可配置产品时,MIN(Price)
将返回5,我只是了解到可配置产品我可能会产生负面差异,这意味着现在我需要更改我的代码而不是获取最小(5)我得到模式(10)
我想我只需要用MODE()替换查询中的MIN()
,但似乎没有针对MySQL的MODE()函数,这里是我正在使用的查询示例< / p>
INSERT INTO import_table
(
product_id, stock_id, price
)
SELECT ODT.product_id, ODT.stock_id, MIN(ODT.Price)
FROM org_data_table AS ODT
GROUP BY ODT.stock_id
是否有一个功能已经存在以获得模式?如果没有那么我需要做什么才能得到它,我想改变我的查询的MIN()
部分
答案 0 :(得分:1)
您可以通过以下查询检索价格模式
SELECT ODT.Price as price, count(ODT.Price) AS cnt
FROM org_data_table as ODT
GROUP BY ODT.price
ORDER BY cnt DESC
LIMIT 1;
这将返回Price
模式值,然后您可以在SELECT语句中使用此值,如下所示,您可以插入模式值,请参阅下文查询:
INSERT INTO import_table
(
product_id, stock_id, price
)
SELECT ODT.product_id, ODT.stock_id, (SELECT ODT.Price as price
FROM org_data_table as ODT
GROUP BY ODT.price
ORDER BY count(ODT.Price) DESC
LIMIT 1) as price
FROM org_data_table AS ODT
GROUP BY ODT.stock_id
答案 1 :(得分:1)
这可能有点棘手,因为MODE可以有多个价格 - 如果2个价格具有相同的数量,那么它们都被认为是MODE。
此查询应返回org_data_table中任何价格在MODE中的记录:
SELECT DISTINCT T.Product_Id, T.Stock_Id, T.Price
FROM org_data_table T
JOIN (
SELECT COUNT(*) cnt, Price
FROM org_data_table
GROUP BY Price
HAVING COUNT(*) = (
SELECT Max(cnt)
FROM (
SELECT COUNT(*) cnt, Price
FROM org_data_table
GROUP BY Price
) t
)
) T2 ON T.Price = T2.Price
以下是一些示例小提琴:http://sqlfiddle.com/#!2/8f1a2/1
显然你可以添加:
INSERT INTO import_table (product_id, stock_id, price)
在查询之前插入记录。
希望这有帮助。