0

Select the 3 most recent records where the values of one column are distinctと同様のことをしようとしていますが、カウントを使用しているため、グループを保持する必要があります。

同じ例を使用します。

 id       time      text      otheridentifier
-------------------------------------------
1        6         apple     4
2        7         orange    4
3        8         banana    3
4        9         pear      3
5        10        grape     2

SELECT *, COUNT(*) FROM `table` GROUP BY (`otheridentifier`) ORDER BY `time` DESC LIMIT 3

適切なカウントで 5、3、1 の id を返しますが、5、4、2 が必要です。

その投稿の解決策は

SELECT * FROM 'table' WHERE 'id' = (SELECT 'id'
FROM 'table' as 'alt'
WHERE 'alt'.'otheridentifier' = 'table'.'otheridentifier'
ORDER BY 'time' DESC
LIMIT 1) ORDER BY 'time' DESC LIMIT 3

しかし、そこにグループ化が必要なので、カウントを取得する方法がわかりませんERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause。その先頭に COUNT(*) を追加すると取得されます。

4

1 に答える 1

0
SELECT *, COUNT(*)
FROM `table`
GROUP BY (`otheridentifier`)
ORDER BY COUNT(*) DESC LIMIT 3
^^^^^^^^^^^^^^^^^

order-by 句を変更するだけです。グループ化/集計が完了した後に並べ替えが行われるため、それらの集計関数の結果で並べ替えることができます。

于 2011-04-19T20:03:41.527 に答える