предложение select с условием max

#sql #oracle

#sql #Oracle

Вопрос:

Для моей таблицы базы данных:

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

в моей таблице2

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

в моей таблице3

 //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, предназначено только для чисел, я не могу найти ни одного примера, подходящего для моего вопроса, который нужно учитывать (*)

ожидаемый результат:

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

Ответ №1:

Упорядочить по количеству, чтобы получить список, начиная с наиболее распространенного 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;
 

Комментарии:

1. я хочу только max. не весь заголовок

2. я не думаю, что это хорошее решение, не так ли? разве мы не можем использовать предложение max?

Ответ №2:

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

Комментарии:

1. OP запрашивал наиболее часто используемый заголовок, а не имя

2. Затем просто замените ‘name’ на ‘title’.