SQL - Агрегирование в MySQL - PullRequest
       16

SQL - Агрегирование в MySQL

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

Я использую MySQL и пишу этот запрос:

select gauno, count(potno)
from druide_potion
group by gauno
having count(potno) = min(count(potno))

Но Mysql говорит: "# 1111 - Неправильное использование групповой функции".

В чем этот запрос некорректен?(Когда я удаляю HAVING, у меня не появляется ошибка, но результат также не ожидается).

Спасибо.

Ответы [ 3 ]

3 голосов
/ 29 января 2011

В предложении using каждый агрегат возвращает только одно значение, поэтому запрос min() из count() не имеет смысла.

Возможно, вы ищете что-то вроде этого:

select  *
from    druide_potion
group by
        gauno
having  count(potno) = 
        (
        select  count(potno)
        from    druide_potion
        group by
                gauno
        order by
                 count(potno)
        limit 1
        )

Это вернет все gauno с минимальным количеством строк с ненулевым столбцом potno.

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

Правильный запрос ANSI

SELECT D.*
FROM
(
    select min(cnt) MinCount
    FROM
    (
        select gauno, count(potno) cnt
        from druide_potion
        group by gauno
    )
    Counted1
) MinCounted
inner join
(
    select gauno, count(potno) Cnt
    from druide_potion
    group by gauno
) Counted2
    on MinCounted.MinCount = Counted.Cnt
inner join druide_potion D
    ON D.gauno = Counted2.gauno
0 голосов
/ 29 января 2011
select gauno, count(potno)
  from druide_potion
 group by gauno
 order by count(potno)
 limit 1
...