いくつかの価格 (この例では 3 つ) を持つ SELECT クエリからのデータ行があります。1 つは当社の価格、1 つは競合他社 1 の価格、もう 1 つは競合他社 2 の価格です。他の 2 つの価格と比較した価格のランクを表示する列を追加したいと考えています。私たちの価格が最低の場合、それは番号 1 を吐き出し、最高の場合、それが吐き出す数を吐き出します。
このようなもの:
Make | Model | OurPrice | Comp1Price | Comp2Price | Rank | OutOf
MFG1 MODEL1 350 100 500 2 3
MFG1 MODEL2 50 100 100 1 3
MFG2 MODEL1 100 NULL 50 2 2
MFG2 MODEL2 9999 500 NULL 2 2
-上記のように競合他社の価格が NULL になることがありますが、これが私の問題だと思います。私は試してみましたCASE
が、競合他社が1つしかない場合に機能しますが、AND
ステートメントを追加すると、すべてのランクが吐き出されますNULL
。MySQLクエリを介してこれを行うより良い方法はありますか?
SELECT
MT.MAKE as Make,
MT.MODEL as Model,
MT.PRICE as OurPrice,
CT1.PRICE as Comp1Price,
CT2.PRICE as Comp2Price,
CASE
WHEN MT.PRICE < CT1.PRICE AND MT.PRICE < CT2.PRICE
THEN 1 END AS Rank
(CT1.PRICE IS NOT NULL) + (CT2.PRICE IS NOT NULL) + 1 as OutOf
FROM mytable MT
LEFT JOIN competitor1table as CT1 ON CT1.MODEL = MT.MODEL
LEFT JOIN competitor2table as CT2 ON CT2.MODEL = MT.MODEL
ORDER BY CLASS