数据库是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'。
任何帮助将不胜感激,
感谢。
答案 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)
如果我没有错,你想得到两行结果。一个是最大计数男性名字,一个是最大计数女性名字。
我创建了以下示例数据库。
现在您希望输出为
尝试使用以下代码
(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子句中添加名称列时,可能会减少计数并再次需要求和。