mysql查询作业

时间:2018-03-02 22:02:06

标签: mysql sql select

6您出生年份最受欢迎的男女名字是什么?

数据库是BabyNames的属性: 姓名,年份,性别,地点和人数。

select sum(count) 
from BabyName 
where year='1989';

返回1989年的总数

select name, sum(count) 
from BabyName 
where year=1989 
group by name;

返回1989年每个名字总数的完整列表

如何添加到查询中以便它返回Name 这个特定年份的性别最高的人数=' M'和性别=' F'。

任何帮助将不胜感激,

感谢。

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

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

答案 2 :(得分: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)

     )

答案 3 :(得分:-1)

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

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