2014-06-23 71 views
2

对于我的数据库表的条款:在我的表3选择具有最大条件

//table1 
name 
--------- 
john 
mary 
ali 

在我的表2

//table2 
title 
--------- 
test1 
test2 
test3 

//table3 
name  title 
----------------- 
john  test1 
john  test2 
john  test3 
mary  test2 

所以我的问题是要找到的标题,多次被名字加入。

所以我的查询是:

SELECT t2.title from table2 t2 inner join table3 t3 on 
    t2.title = t3.title inner join table1 t1 on 
    t1.name = t3.name having max(....) 

为我检查一些网站。他们所使用的having子句仅用于数字,我找不到任何的例子,适合我的问题需要COUNT(*)

预期输出:

//result 
title 
--------- 
test2 

回答

2

排序计得到一个列表,从最普通的ttile

SELECT t2.title 
from table2 t2 
inner join table3 t3 on t2.title = t3.title 
inner join table1 t1 on t1.name = t3.name 
group by t2.title 
order by count(*) desc 

开始变得只有顶部的结果使用

SELECT * FROM 
(
    SELECT t2.title 
    from table2 t2 
    inner join table3 t3 on t2.title = t3.title 
    inner join table1 t1 on t1.name = t3.name 
    group by t2.title 
    order by count(*) desc 
) X 
WHERE ROWNUM = 1; 
+0

我只是最大的。不是所有标题 – user3553846

+0

我不认为这是一个好的解决方案是不是?我们不能使用max子句吗? – user3553846

+0

我认为这是一个很好的解决方案。 –

0
SELECT max(name) KEEP(DENSE_RANK FIRST ORDER BY COUNT(NAME) DESC) 
FROM table3 
GROUP BY name 
+0

OP要求提供最常用的标题,而不是名称 – Serpiton

+0

然后,只需用'title'替换'name'即可。 – Marko