Найти наибольшее количество вхождений в столбце в SQL - PullRequest
0 голосов
/ 08 января 2011

Учитывая эту таблицу:

Заказать
custName описание to_char (цена)
А $ 14
B desb $ 14
C desc $ 21
D desd $ 65
E dese $ 21
$ 78
G desg $ 14
H desh $ 21

Я пытаюсь отобразить всю строку, где цены имеют самые высокие вхождения, в данном случае 14 долларов и 21 доллар

Я считаю, что должен быть подзапрос. Итак, я начал с этого:

select max(count(price))  
from orders  
group by price

что дает мне 3.

Через некоторое время я не думаю, что это было полезно. я считаю, что мне нужно было значение 14 и 21, а не число, поэтому я могу указать это в предложении where. но я застрял, как отобразить это. любая помощь?

ОБНОВЛЕНИЕ: Итак, я получил запрос на 14 и 21 из этого

    select price
    from orders
    group by price
    having (count(price)) in
    (select max(count(price))
    from orders
    group by price)

но мне нужно, чтобы отобразить столбец custname и description, в котором я получаю сообщение об ошибке:

select custname, description, price
from orders
group by price
having (count(price)) in
(select max(count(price))
from orders
group by price)

SQL Error: ORA-00979: not a GROUP BY expression

любая помощь по этому поводу?

Ответы [ 4 ]

1 голос
/ 08 января 2011

Я думаю, вы довольно близки.Поскольку HAVING работает с результирующим набором GROUPed, попробуйте

HAVING COUNT(price) IN

или

HAVING COUNT(price) =

вместо текущей строки.

0 голосов
/ 08 января 2011
select employee, count(employee)
from work
group by employee
having count(employee) =
( select max(cnt) from
( select employee, count(employee cnt
from work
group by employee
)
);

Ссылка

0 голосов
/ 08 января 2011

Поскольку вы пометили вопрос как оракул, вы можете использовать оконные функции для получения агрегированных и подробных данных в рамках одного запроса.

SELECT   COUNT (price) OVER (PARTITION BY price) count_at_this_price, 
         o.* 
from orders o 
order by 1 desc
0 голосов
/ 08 января 2011

Вы можете попробовать что-то вроде

select * from orders where price in (select top 2 price from orders group by price order by price desc)

Я не уверен в ограничении результатов в Oracle, в SQL Server это топ, возможно, вам следует использовать limit.

...