Mysql 分组查询时如何获取其他行值?

Mysql 分组查询时如何获取其他行值?,mysql,sql,Mysql,Sql,让我举例说明, id firstname lastname Mark -------------------------------- 1 arun prasanth 40 2 ann antony 45 3 sruthy abc 41 6 new abc 47 1 arun prasanth 45 1 arun prasanth 49

让我举例说明,

id  firstname lastname Mark
--------------------------------
1   arun        prasanth  40
2   ann         antony      45
3   sruthy      abc          41
6   new         abc          47
1   arun        prasanth  45
1   arun        prasanth 49
2   ann        antony     49
照现在的情况,如果我这样问:

select count(*) as count, firstname, lastname, Mark
       from tableA
       group by id
       order by count desc
然后在结果中,3 arun~~行将位于顶部。我必须保留这个订单计数说明

但是我想搜索每个分数是49 45 40。 我想把结果放在$sql中,并像$sql一样使用它['every mark score for ann'],我该怎么做

使用分组讨论:

这将显示类似“40,45,49”的带有逗号的标记。如果不需要逗号,请在组_CONCAT中添加分隔符,如下所示:

SELECT COUNT(*) AS COUNT, firstname, lastname, GROUP_CONCAT(mark SEPARATOR ' ') AS Mark
       FROM tableA
       GROUP BY id
       ORDER BY COUNT DESC

这将使用空格“”作为分隔符,而不是像“40 45 49”这样的逗号。当然,您可以定义所需的任何分隔符。

在查询结果时使用Having子句

select count(*) as count, firstname, lastname, Mark
       from tableA
       group by id having by firstname = 'ann'
       order by count desc

如果需要原始数据,请按以下顺序使用计数或子查询:

在MySQL的旧版本中,您可以改用子查询:

select a.*
from tableA a
order by (select count(*) from tableA a2 where a2.id = a.id) desc,
         id

也发布您的预期输出。注意,因为您是按id进行分组的。只有通过共同关联,firstname和lastname才能存在于您的答案中。在MySQL-8.0中,默认SQL模式将在这方面出错。看见您可能需要选择任意\u VALUEfirstname、任意\u VALUElastname。。。这表明您的数据未标准化,即用户id/名称在单独的表中。您的主键是什么?并向我们显示所需的结果是什么样子的thx!只是我的问题不好,因为我必须用所有的例子,而不仅仅是“安”。谢谢你!
select a.*
from tableA a
order by count(*) over (partition by id) desc,
         id
select a.*
from tableA a
order by (select count(*) from tableA a2 where a2.id = a.id) desc,
         id