149

タグのテーブルがあり、リストから最大数のタグを取得したいと思います。

サンプルデータは次のようになります

id (1) tag ('night')
id (2) tag ('awesome')
id (3) tag ('night')

を使用して

SELECT COUNT(*), `Tag` from `images-tags`
GROUP BY `Tag`

探しているデータを完全に取り戻すことができます。ただし、タグ数が最も多いものが最初になるように整理し、最初の20個程度しか送信しないように制限したいと思います。

私はこれを試しました...

SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20

そして、私は「グループ関数の無効な使用-ErrNr1111」を取得し続けます

私は何が間違っているのですか?

MySQL4.1.25を使用しています-Debian

4

5 に答える 5

231

MySQL のすべてのバージョンで、単純に SELECT リストで集計をエイリアスし、エイリアスで並べ替えます。

SELECT COUNT(id) AS theCount, `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY theCount DESC
LIMIT 20
于 2008-08-27T15:46:41.113 に答える
54

バージョン5より前のMySQLでは、ORDERBY句で集計関数を使用できませんでした。

非推奨の構文を使用すると、この制限を回避できます。

SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY 1 DESC
LIMIT 20

1、これはグループ化する最初の列なので。

于 2008-08-26T13:14:37.073 に答える
10

MySQLについてはわかりませんが、MS SQLでは、order by句で列インデックスを使用できます。sを使用してカウントを行う場合group byは、操作が簡単になる傾向があるため、これを以前に実行しました。

それで

SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20

になる

SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER 1 DESC
LIMIT 20
于 2008-08-26T13:15:36.260 に答える
7

Oracle では、このようなものがうまく機能して、カウントと順序付けをもう少しうまく分離できます。MySql 4 で動作するかどうかはわかりません。

select 'Tag', counts.cnt
from
  (
  select count(*) as cnt, 'Tag'
  from 'images-tags'
  group by 'tag'
  ) counts
order by counts.cnt desc
于 2008-08-26T17:34:48.617 に答える
-4

このクエリを試してください

 SELECT  data_collector_id , count (data_collector_id ) as frequency 
    from rent_flats 
    where is_contact_person_landlord = 'True' 
    GROUP BY data_collector_id 
    ORDER BY count(data_collector_id) DESC
于 2015-07-13T09:51:28.983 に答える