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

时间:2020-01-30 05:54:15

标签: 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
2   ann        antony     49

按原样,如果我这样查询:

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

然后在结果中,3 arun ~~行将在顶部。我必须保持此顺序(计数降序)

但是我想搜索每个Mark分数为49 45 40。 我想将结果放入$ sql并像$ sql ['((ann的每个分数))]一样使用它,该怎么做?

3 个答案:

答案 0 :(得分:1)

使用GROUP_CONCAT

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

这将显示带有逗号的标记,例如“ 40、45、49”。如果您不想用逗号,请在SEPARATOR中添加GROUP_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'之类的逗号。当然,您可以定义所需的任何分隔符。

答案 1 :(得分:0)

在查询中使用Haveing子句获取结果

答案 2 :(得分:0)

如果需要原始数据,请使用count()order by中的子查询:

select a.*
from tableA a
order by count(*) over (partition by id) desc,
         id

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

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