mysql查询作业

问题描述 投票:-1回答:4

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'。

任何帮助,将不胜感激,

谢谢。

mysql sql select
4个回答
2
投票

它实际上需要两个查询,每个性别一个,并按计数排序时将每个查询限制在第一行:

(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);

0
投票

据我所知,您只想显示最高计数的结果。在这种情况下,您必须使用方法TOP,ROWNUM或LIMIT取决于您正在使用的数据库。 TOP的工作原理如下:SELECT TOP / number /,在你的情况下SELECT TOP 1名称,sum(count)如果LIMIT有效,那么你将它作为查询的最后一行:LIMIT 1如果ROWNUM有效,那么你使用它像那样:WHERE ROWNUM <= 1

更新:由于您的数据库是MySQL,您应该使用LIMIT


0
投票

如果我没有错,你想得到两行结果。一个是最大计数男性名字,一个是最大计数女性名字。

我创建了以下示例数据库。

enter image description here

现在你想输出为

enter image description here

尝试使用以下代码

(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)

     )

-1
投票
select gender, count(*)
from BabyName
where year = 1989
group by gender;

这是为了防止您只需要性别,因为当您在group by子句中添加name列时,可能会减少计数并再次需要求和。

© www.soinside.com 2019 - 2024. All rights reserved.