0

このクエリは期待される結果を提供しません、

私がやろうとしていること:

2つの異なる列/フィールドと値に基づいてユーザーをランク付けしようとしています。そして、最上位のユーザーを一番上に表示したい。

selectクエリでRANKとしてダミー列を作成し、2つのCASE ...ASRANKを使用しています。

これは良い習慣ですか?または、より良い方法はありますか?

PS:RANKはさまざまなフィールドから動的になるため、保存しないように永続化する必要はありません(これは、2つのフィールドの例です)

SELECT *, 

CASE EMPLOYEEOF
WHEN 'ASDF' THEN @RANK := @RANK+1 
END AS RANK,

CASE VENDOROF 
WHEN 'WXYZ' THEN @RANK := @RANK+1
END AS RANK

from USERMASTER, (SELECT @RANK := 0) r ORDER BY RANK DESC;

編集:与えません!1行目

4

1 に答える 1

0

テーブル(USERMASTER)から選択し、計算されたランクを生成してから、そのランクで並べ替える場合は、次の方法で効果的に行うことができます。

1)ランク付けの基準を決定する-ランク付けに重要なこと、費やしたお金、学生の成績などを把握し、メトリックが何であるかを知っておくと役立ちます。

2)ロジックを記述します-CASEステートメントは、複数の条件が含まれている場合に最適です。たとえば、GPAが3.0を超え、クラスの成績が「A」に等しい生徒に高いランクを付けたいが、低いGPAに低いランクを付けたい場合は、次のように言います。

SELECT CASE WHEN student_grade = 'A'
            AND student_gpa > 3.0
            THEN 4
       ELSE 3
END rank
FROM students
ORDER BY rank DESC

これにより、student_gradeおよびstudent_gpaロジックに基づいてランク列が作成され、次に、この計算されたランクに基づいて、最も高いランクの順に学生が並べ替えられます。

3)ケースをテストする-いくつかのサンプルデータを確認して、ロジックが探している結果を提供していることを確認します。私の例では(私はあなたの基準を知らないので:

student student_grade   student_gpa
John    A           3.5
Mike    B           2.9

上記を実行した結果(student_nameでgroup byを使用):

student_name rank
John     4
Mike     3

私の結果は私の期待される結果と一致し(ジョンのランクは4で高く、順序付けによりリストの一番上に表示されます)、これで完了です。

于 2013-01-15T19:13:58.630 に答える