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