让我举例说明
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的每个分数))]一样使用它,该怎么做?
答案 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