0

我有以下表格:

items(itemid, itemName, catid)

categories (catid, catname)

prices (itemid, open_price, close_price)
  • 每个项目仅属于 1 个类别
  • 每个商品在价格表中只有 1 个 open_price, close_price 行

如果我有 10 个类别,每个类别中有 10 个项目(例如),我如何找到每个类别中价格变化最大的公司。

我目前有一个 php 循环,它运行并获取每个类别的最佳表现,但想知道是否有一种方法可以更有效地做到这一点。

谢谢

代码:

foreach category, run the following query:

SELECT c.itemid, c.itemname ,

100.0 * ( cp.close_price - cp.open_price )/ IFNULL(cp.open_price,1) AS overall_change

FROM prices cp

LEFT JOIN items c ON c.itemid = prices.itemid

WHERE c.catid=8 ORDER BY overall_change DESC LIMIT 1;

4

1 回答 1

0

如果您不介意抽奖(当两个项目在一个类别中排名靠前时)

SELECT 
    cat.catid,
    cat.catname,
    c.itemid, 
    c.itemname ,
    100.0 * ( cp.close_price - cp.open_price )/ IFNULL(cp.open_price,1) AS overall_change    
FROM 
    categories AS cat
JOIN    
    items AS c
    ON cat.catid = c.catid
JOIN 
    prices AS cp
    ON c.itemid = cp.itemid
JOIN
    (SELECT
        c.catid, 
        MAX(100.0 * ( cp.close_price - cp.open_price )/ IFNULL(cp.open_price,1)) AS overall_change
    FROM   
        items AS c
    JOIN 
        prices AS cp
        ON c.itemid = cp.itemid
    GROUP BY
        c.catid
    ) AS max
    ON cat.catid = c.catid
    AND max.overall_change = (100.0 * ( cp.close_price - cp.open_price )/ IFNULL(cp.open_price,1))
ORDER BY
    cat.catid

...我还没有测试过这个:)

于 2012-05-29T22:36:16.100 回答