2013-02-19 46 views
0

我创建了一大堆的进口产品进入Magento的MySQL的脚本,我使用了一个GROUP BY到组产品进入配置产品MySQL的 - 我要如何将模式从一组通过选择

过去

,我已经使用MIN()拿到最低的价格组,并使用该值作为价格为配置的产品,但由于最近出现了一些类似案例,

Simple Product ID | Price ($) 
------------------------------ 
     1001  | 10 
     1002  | 10 
     1003  | 5 
     1004  | 10 
     1005  | 20 
     1006  | 10 
在这种情况下

,当我创建的配置产品,MIN(Price)会返回5,我只知道,配置产品我可以有一个(5)我得到的模式(10)

我想我只需要用我的查询替换MIN() MODE()但没有'不像是会成为一个MySQL的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()部分

回答

1

您可以通过检索低于查询价格MODE

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 
+0

底部查询通过删除count(ODT.Price)AS cnt'和用'count(ODT.Price)'替换'cnt'来修复,这个子查询只能返回1个字段)但它很完美,谢谢 – 2013-02-19 04:55:24

+0

@Memor-X哦,是的,我没有真正测试过,这种改变是完美的。 – Minesh 2013-02-19 05:04:41

1

这可能有点棘手,因为MODE可能有多个价格 - 如果2个价格具有相同的计数,那么它们都被认为是模式。

这个查询应该从它的价格是在模式的org_data_table返回任何记录:

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) 
在查询之前插入记录的

希望这会有所帮助。

+0

我的查询如何工作(使用你在sql提供的例子)是它会返回2个项目,股票1和股票ID 2之一,但他们的价格将是2组的模式.....然而,你的查询确实有助于解决另一个问题,因为它列出了与模式(或模式中的模式)匹配的所有product_id和stock_ids,当调试问题时,你查询(稍作调整)将有助于解决问题得到期望的模式,谢谢 – 2013-02-19 04:50:19

+0

@ Memor-X - 很高兴我们可以提供帮助。一定要认识到,MODES可以包含多个值 - 因此使用LIMIT 1可能会产生不正确的结果。祝你好运! – sgeddes 2013-02-19 04:57:30