0

我创建了一堆将产品导入 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)

我想我只需MIN()要用 MODE() 替换查询中的

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()我的查询部分

4

2 回答 2

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)

在查询之前插入记录。

希望这可以帮助。

于 2013-02-19T04:20:01.013 回答
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 Mode值,然后您可以在 SELECT 语句中使用它,如下所示,您可以插入Mode值,请参见下面的查询:

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
于 2013-02-19T04:01:11.300 回答