mysql查询作业
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql查询作业相关的知识,希望对你有一定的参考价值。
6 What is the most popular male and female names from your birth year?
该数据库是婴儿姓名,包含姓名,年份,性别,地点和计数。
select sum(count)
from BabyName
where year='1989';
返回1989年的总数
select name, sum(count)
from BabyName
where year=1989
group by name;
返回1989年每个名称的总计数的完整列表
如何添加到查询中,以便它返回具有针对此特定年份的最高计数的名称:gender ='M'和gender ='F'。
任何帮助,将不胜感激,
谢谢。
答案
它实际上需要两个查询,每个性别一个,并按计数排序时将每个查询限制在第一行:
(select
`name`,
`gender`,
count(*) as `num_found`
FROM BabyName
WHERE `year` = '1989' AND `gender` = 'M'
GROUP BY `name`,`gender`
ORDER BY `num_found` DESC
LIMIT 1)
UNION ALL
(select
`name`,
`gender`,
count(*) as `num_found`
FROM BabyName
WHERE `year` = '1989' AND `gender` = 'F'
GROUP BY `name`,`gender`
ORDER BY `num_found` DESC
LIMIT 1);
另一答案
据我所知,您只想显示最高计数的结果。在这种情况下,您必须使用方法TOP,ROWNUM或LIMIT取决于您正在使用的数据库。 TOP的工作原理如下:SELECT TOP / number /,在你的情况下SELECT TOP 1名称,sum(count)如果LIMIT有效,那么你将它作为查询的最后一行:LIMIT 1如果ROWNUM有效,那么你使用它像那样:WHERE ROWNUM <= 1
更新:由于您的数据库是mysql,您应该使用LIMIT
另一答案
如果我没有错,你想得到两行结果。一个是最大计数男性名字,一个是最大计数女性名字。
我创建了以下示例数据库。
现在你想输出为
尝试使用以下代码
(SELECT name,SUM(count)
from BabyName
where gender='F' and year='1989'
group by name
having SUM(count) = (select MAX(name_count)
from (select SUM(count) name_count
from BabyName
where gender='F' and year='1989'
group by name ) tab))
UNION ALL
(
SELECT name,SUM(count)
from BabyName
where gender='M' and year='1989'
group by name
having SUM(count) = (select MAX(name_count)
from (select SUM(count) name_count
from BabyName
where gender='M' and year='1989'
group by name ) tab)
)
另一答案
select gender, count(*)
from BabyName
where year = 1989
group by gender;
这是为了防止您只需要性别,因为当您在group by子句中添加name列时,可能会减少计数并再次需要求和。
以上是关于mysql查询作业的主要内容,如果未能解决你的问题,请参考以下文章