2

基本的に、特定の列に値がある回数でクエリを並べ替えたいと思います。繰り返しをカウントする別のクエリと結合することでこれを行いましたが、他の大規模なクエリは避けたいと思います。私は、私が望むことをするオーダーバイのトリックがあるかもしれないと考えています。

注: 私が使用しているクエリは膨大で、会社情報でいっぱいです。そのため、私の問題を例示するクエリの例を書きます。

使用する

SELECT user1, rev1, user2, rev2, userCount
FROM someTable,
    (SELECT user2, count(*) userCount
     FROM someTable
     WHERE something1 = something2) counts
WHERE something1 = something2
AND counts.user2 = someTable.user2
ORDER BY userCount DESC

正しい結果が得られたので、試してみました

SELECT user1, rev1, user2, rev2 
FROM someTable
WHERE something1 = something2
ORDER BY COUNT(user2) DESC

しかし、これは私が望む結果をもたらしません。

これを解決するSQLトリックはありますか?

ありがとう!

4

3 に答える 3

3

count()対応する なしでを使用しているため、クエリは機能しませんgroup by。集計クエリがないため、意味がありません。

やりたいことを行う良い方法は、分析関数を使用することです。

SELECT user1, rev1, user2, rev2 
FROM (select t.*,
             COUNT(*) over (partition by user2) as numuser2
      from someTable
      WHERE something1 = something2
     ) t
ORDER BY numuser2 desc, user2

構文は、count(*) over各値の行をカウントし、user2それを行に追加します。

ちなみに、私も追加user2しましたorder by。このように、いくつかの値が同じカウントを持つ場合でも、それらは分離されます。

于 2013-05-06T18:37:38.353 に答える
3
SELECT user1, rev1, user2, rev2, COUNT(*) OVER (PARTITION BY user2) as c
FROM someTable
WHERE something1 = something2
ORDER BY c DESC

編集:30秒からゴードンに殴られた!! .)

于 2013-05-06T18:38:14.230 に答える
0

より高速なパフォーマンスを得ることができれば、大規模なクエリを使用することは必ずしも悪いことではありません。そうは言っても、最初のクエリを使用したくない理由が何であるかを判断するのは困難です。パフォーマンスの問題が発生していますか? その場合、テーブルが使用しているインデックスが役立ちます。

とにかく、最初のクエリのネストされたクエリには「GROUP BY」句がないようです。「something1 = something2」は、パフォーマンスまたは結果に関して異なることを意味する場合があります。ですので、具体例を挙げていただけると助かります。

于 2013-05-06T18:38:48.170 に答える