#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’.