Mysql 如何进行SQL查询以查找聚合函数的最大值,如;计数;?
这是我需要的英文查询: 显示动物id、名称和动物的检查次数,其中对动物进行的检查最多。Mysql 如何进行SQL查询以查找聚合函数的最大值,如;计数;?,mysql,sql,Mysql,Sql,这是我需要的英文查询: 显示动物id、名称和动物的检查次数,其中对动物进行的检查最多。 想想看,也许是第一。在这种情况下,所有拴在一起的动物都应该归还 以下是一些相关的SQL: select an_id, an_name, count(distinct ex_id) as NumberExams from vt_animals join vt_exam_headers using (an_id) 如果不使用desc和limit以及理想情况下使用groupby,我如何做到这一点?我曾想过使用ma
想想看,也许是第一。在这种情况下,所有拴在一起的动物都应该归还 以下是一些相关的SQL:
select an_id, an_name, count(distinct ex_id) as NumberExams
from vt_animals
join vt_exam_headers using (an_id)
如果不使用
desc
和limit
以及理想情况下使用groupby
,我如何做到这一点?我曾想过使用max
,但它似乎不适用于count
您必须使用group by
子句来处理聚合函数中未包含的列名
select an_id, an_name, count(distinct ex_id) as NumberExams
from vt_animals
group by an_id, an_name
必须对聚合函数中不包含的列名使用
group by
子句
select an_id, an_name, count(distinct ex_id) as NumberExams
from vt_animals
group by an_id, an_name
首先选择检查次数最多的动物:
SELECT an_id,count(ex_id) FROM animals GROUP BY an_id ORDER BY count(*) DESC LIMIT 1
SELECT a.an_id, a.an_name, a.number_exams
FROM (SELECT an_id, an_name, COUNT(ex_id) as number_exams
FROM vt_animals
JOIN vt_exam_headers USING (an_id)
GROUP BY an_id) AS a
HAVING a.number_exams >= MAX(a.number_exams)
然后可以将其用作子查询
说明:您按计数(*)降序排列此表,然后选择最大值前1名。首先选择检查次数最多的动物:
SELECT an_id,count(ex_id) FROM animals GROUP BY an_id ORDER BY count(*) DESC LIMIT 1
SELECT a.an_id, a.an_name, a.number_exams
FROM (SELECT an_id, an_name, COUNT(ex_id) as number_exams
FROM vt_animals
JOIN vt_exam_headers USING (an_id)
GROUP BY an_id) AS a
HAVING a.number_exams >= MAX(a.number_exams)
然后可以将其用作子查询
说明:您按计数(*)降序排列此表,然后选择最大值top 1。如果我很理解此查询,如果多个动物的检查次数最多,则类似的内容将返回动物组:
SELECT an_id,count(ex_id) FROM animals GROUP BY an_id ORDER BY count(*) DESC LIMIT 1
SELECT a.an_id, a.an_name, a.number_exams
FROM (SELECT an_id, an_name, COUNT(ex_id) as number_exams
FROM vt_animals
JOIN vt_exam_headers USING (an_id)
GROUP BY an_id) AS a
HAVING a.number_exams >= MAX(a.number_exams)
如果我能很好地理解这个查询,如果不止一个动物的检查次数最多,那么类似这样的查询将返回该组动物:
SELECT an_id,count(ex_id) FROM animals GROUP BY an_id ORDER BY count(*) DESC LIMIT 1
SELECT a.an_id, a.an_name, a.number_exams
FROM (SELECT an_id, an_name, COUNT(ex_id) as number_exams
FROM vt_animals
JOIN vt_exam_headers USING (an_id)
GROUP BY an_id) AS a
HAVING a.number_exams >= MAX(a.number_exams)
根据您正在使用的数据库产品的不同,其复杂性可能有所不同。例如,emibloque的答案在MS SQL Server中不起作用,因为having子句需要与group by子句相对应。在这种情况下,您必须按照以下思路进行操作:
select * from
(
select an_name, count(*) exams
from vt_animals a join vt_exam_headers e on a.an_id = e.an_id
group by an_name
) sub1
where exams =
(
select max(exams) from
(
select an_id, count(*) exams
from vt_exam_headers
group by an_id
) sub2
)
或者,如果您更喜欢使用变量:
declare @max_exams int;
select @max_exams = (
select max(exams) from
(
select an_id, count(*) exams
from vt_exam_headers
group by an_id
) sub
);
select * from
(
select an_name, count(*) exams
from vt_animals a join vt_exam_headers e on a.an_id = e.an_id
group by an_name
) sub1
where exams = @max_exams
根据您正在使用的数据库产品的不同,其复杂性可能有所不同。例如,emibloque的答案在MS SQL Server中不起作用,因为having子句需要与group by子句相对应。在这种情况下,您必须按照以下思路进行操作:
select * from
(
select an_name, count(*) exams
from vt_animals a join vt_exam_headers e on a.an_id = e.an_id
group by an_name
) sub1
where exams =
(
select max(exams) from
(
select an_id, count(*) exams
from vt_exam_headers
group by an_id
) sub2
)
或者,如果您更喜欢使用变量:
declare @max_exams int;
select @max_exams = (
select max(exams) from
(
select an_id, count(*) exams
from vt_exam_headers
group by an_id
) sub
);
select * from
(
select an_name, count(*) exams
from vt_animals a join vt_exam_headers e on a.an_id = e.an_id
group by an_name
) sub1
where exams = @max_exams
谁给你这个要求的?试一个小问题你在考试中得到了吗?只是一个家庭作业问题。我似乎在作业笔记中找不到类似的东西,所以我问了stackoverflow。我们正在学习“分组依据”和聚合函数,因此解决方案可能与此有关。您以前使用过子查询吗?谁给了您这个要求?试一个小问题你在考试中得到了吗?只是一个家庭作业问题。我似乎在作业笔记中找不到类似的东西,所以我问了stackoverflow。我们正在学习“分组依据”和聚合函数,因此解决方案可能与此有关。您以前使用过子查询吗?对,在我的测试查询中包括了它,但我忘了在这里重写。谢谢。是的,在我的测试查询中我包括了它,但是我忘了在这里重写。谢谢。我没有投票是因为你似乎没有读过这个问题。我没有投票是因为你似乎没有读过这个问题。