0

こんにちは、Rank() 関数を実装するのが難しいと感じています。以下は私のサンプル テーブルです。

id     category   value   volume
1      product1     0.4     0.5 
2      product2     0.9     0.6  
3      product3     0.3     0.7
4      product4     0.19    0.59 

ここで、列「値」と「ボリューム」に別々にランクを付け、各列の上位 3 と下位 3 を取得したいと思います。Firefox ブラウザー sqlmanager で以下のコードをテストしています。しかし、クエリは機能していません。

SELECT Value, RANK() 
OVER (ORDER BY Value DESC) AS xRank 
FROM (SELECT Value FROM product_achievment) WHERE xRank>=3;

どんな助けでも大歓迎です。

4

1 に答える 1

0
  1. はサポートしていませんRANK
  2. 必要な 4 つの異なるクエリがありUNIONます。

したがって、次のクエリは目的の行を返します。

SELECT * FROM product_achievement ORDER BY value LIMIT 3
UNION
SELECT * FROM product_achievement ORDER BY value DESC LIMIT 3
UNION
SELECT * FROM product_achievement ORDER BY volume LIMIT 3
UNION
SELECT * FROM product_achievement ORDER BY volume DESC LIMIT 3;

の回避策RANK:

ランキング情報も必要な場合はVIEW、ランキング付きの を作成することをお勧めします。

CREATE VIEW ranked_product_achievement AS
SELECT *,
(SELECT COUNT() FROM product_achievement WHERE value<=t.value) AS r_value_a,
(SELECT COUNT() FROM product_achievement WHERE value>=t.value) AS r_value_d,
(SELECT COUNT() FROM product_achievement WHERE volume<=t.volume) AS r_volume_a,
(SELECT COUNT() FROM product_achievement WHERE volume>=t.volume) AS r_volume_d
FROM product_achievement AS t;

次にSELECT、作成されたビューから次のことができます。

SELECT id, category, value, volume, r_value_a, r_volume_a
FROM ranked_product_achievement
WHERE r_value_a<=3 OR r_value_d<=3 OR r_volume_a<=3 OR r_volume_d<=3;
于 2013-10-03T08:45:09.307 に答える