2014-10-16 50 views
-1
SELECT a.name,a.birth_year,COUNT(a.name) 
FROM HUMAN a 
WHERE EXISTS(SELECT b.citizenship 
        FROM NATIONALITY b 
        WHERE b.citizenship='Indian') 
GROUP BY a.name,a.birth_year; 

我想提取人名表中出现次数最多的名称,并且该人的公民身份是印度人。我试着做MAX(COUNT(a.name)),但它不起作用。任何想法如何做到这一点?SQL,如何提取最大出现次数的条目

+2

您正在使用哪些DBMS? SQL Server,oracle,mysql ...? – paqogomez 2014-10-16 20:23:43

回答

1

这或许你想要做什么:

select h.name 
from human h join 
    citizenship c 
    on h.name = b.name 
where c.citizenship = 'Indian' 
group by h.name 
order by count(*) desc 
fetch first 1 rows only; 

fetch first 1 rows only是ANSI标准,但并非所有的数据库都支持它。您的数据库可能使用limit,top或其他。

0
SELECT a.name,a.birth_year,COUNT(a.name) as c 
FROM HUMAN a 
WHERE EXISTS(SELECT b.citizenship 
       FROM NATIONALITY b 
       WHERE b.citizenship='Indian') 
GROUP BY a.name,a.birth_year 
ORDER by c DESC 
LIMIT 0, 1; 
0

是的,使用嵌套选择查询可以很容易。

Select max(count1),name1 from (
SELECT a.name name1,COUNT(a.name)  count1 FROM HUMAN a WHERE EXISTS(SELECT b.citizenship FROM NATIONALITY b WHERE b.citizenship='Indian') GROUP BY a.name)