MYSQL组Gy排序与计数?

MYSQL组Gy排序与计数?,mysql,group-by,mysql-error-1140,Mysql,Group By,Mysql Error 1140,我正试图做一些类似的事情,但有一个计数,这意味着我需要保留该组 使用相同的示例: id time text otheridentifier ------------------------------------------- 1 6 apple 4 2 7 orange 4 3 8 banana 3 4 9 pear

我正试图做一些类似的事情,但有一个计数,这意味着我需要保留该组

使用相同的示例:

 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
将返回具有正确计数的id 5、3、1,但我需要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
但我不知道如何获取计数,因为我需要在那里进行分组:我得到
错误1140(42000):如果没有GROUP BY子句,则将GROUP列(MIN()、MAX()、count()、…)与没有GROUP列混合是非法的,如果我将count(*)添加到该子句的开头

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

只需更改ORDERBY子句。排序是在分组/聚合完成后进行的,因此您可以根据这些聚合函数的结果进行排序。

您的sql中没有任何group by。你想数数什么?我在第一个查询中是这样做的:我想数数按“otheridentifier”分组的项目数。这似乎并没有保留我按“time”排序的需要。所以你想要任何组中的最后一条记录?是的,这就是我想要的!我希望记录与上次匹配,按otheridentifier分组,并具有该特定组中的所有计数。假设id是一个自动递增列,则只需选择
MAX(id)
,而不是
*
,这将为您提供每个组中的最高id。不,抱歉,在我的例子中,id实际上是来自另一个表的引用。即使在这个假设的例子中,它也适用于这种配置,但如果“时间”比它的呈现方式更随机,它就不起作用了。