Я пытаюсь отобразить количество книг в категориях.

Где Count (Категория)> Минимальное количество в Count (Категория)

Пример;

Если категории

A = 1
b = 2
c = 3
D = 1
E = 1

Я пытаюсь показать категории, которые> 1, используя MIN.

Я получаю следующее сообщение об ошибке:

ORA-00935: групповая функция вложена слишком глубоко

SELECT Count(Category),
       Category 
From Books
Having Count((Category) > MIN(Count(Category)
Group BY Category  
2
aofe1337 27 Май 2016 в 08:52

4 ответа

Лучший ответ

Ищете что-то вроде этого:

Select Count(Category),
       Category 
From Books 
Group BY Category 
Having Count(Category) > (Select Min(cnt)
                          from (Select Count(Category) AS cnt
                                From Books
                                Group By Category))

При этом будут выбраны все категории, количество которых превышает минимальное количество среди всех категорий.

4
Giorgos Betsos 27 Май 2016 в 05:58

Это должно сделать это:

 SELECT Category, CategoryCount from
 (SELECT rownum as r, Category, Count(*) as CategoryCount
 From Books 
 Group BY Category
 Order by CategoryCount asc)
 Where r > 1;
0
Piyg 27 Май 2016 в 06:06

Другой способ - rank подсчитывать, начиная с самого низкого (связям присваивается одинаковый ранг) и выбирать только строки с рангом больше 1:

select * from (
    select count(*) cnt, category,
      rank() over (order by count(*)) rn
    from books
    group by category  
) t where rn > 1
2
FuzzyTree 27 Май 2016 в 06:29

Ответ Гиоргоса правильный. Его можно изменить (и сделать немного более эффективным) с помощью факторинга подзапросов:

with ctg (category, categ_count) as (
        select   category, count(*)
        from     books
        group by category
     )
select category, categ_count
from   ctg
where  categ_count > (select min(categ_count) from ctg);
0
mathguy 27 Май 2016 в 12:20