0

次のテーブルがあります。

items(itemid, itemName, catid)

categories (catid, catname)

prices (itemid, open_price, close_price)
  • 各アイテムは 1 つのカテゴリのみに属します
  • 各アイテムの価格テーブルには、open_price、close_price の行が 1 つだけあります

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

引き分けを気にしない場合 (2 つのアイテムが 1 つのカテゴリのトップにある場合)

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 に答える