1

さて、次の MySQL クエリがあるとしましょう。

SELECT table1.*, COUNT(table2.link_id) AS count
FROM table1
    LEFT JOIN table2 on (table1.key = table2.link_id)
GROUP BY table1.key
ORDER BY table1.name ASC
LIMIT 20

シンプルですよね?table1各行がリンクされた回数とともに情報を返しますtable2

ただし、結果の行を 20 に制限し、結果の行を で並べ替えていることに気付くでしょうtable1.name。これが行うことは、上位 20 件の結果をアルファベット順に返すことです。

count降順に基づいて上位 20 件の結果に制限できる方法があるかどうか疑問に思っていたこと。また、残りの 20 の結果をアルファベット順に取得します。返された配列をフォローアップ コードで簡単に並べ替えることができることはわかっていますが、1 つのクエリでこれを行う方法があるかどうか疑問に思っています。

4

1 に答える 1

1

制限に副選択を使用し、外側の選択で並べ替えます

SELECT * FROM (SELECT table1.*, COUNT(table2.link_id) AS count
FROM table1
    LEFT JOIN table2 on (table1.key = table2.link_id)
GROUP BY table1.key
ORDER BY count DESC
LIMIT 20 ) t
ORDER BY name ASC
于 2013-10-29T09:06:09.593 に答える