2013-02-09 3 views
1

Примечание. Я знаю, что запрос не является полным, я пытаюсь собрать его несколько раз за раз. Я столкнулся с ошибкой в ​​этой точкеОшибка SQL-запроса: «Недействительное использование групповой функции»

В принципе, я получаю ошибку MySQL

Invalid использование групповой функции

, и я не могу понять, почему.

Это схема базы данных Я поиск информации:

diagram

Вопрос говорит:

«Показать имя издателя и количество книг, изданные для тех издателей, которые опубликовали более две книги. Записи должны сортироваться по количеству книг, опубликованных в порядке убывания, за которым следует имя издателя в порядке возрастания. Ваш результат должен соответствовать приведенному ниже отображению (включая заголовки столбцов) ».

Вывод должен выглядеть следующим образом:

output

Это запрос, я пытаюсь:

select publisher.name as "Publisher Name", count(book.isbn) 
from publisher as "Book Count" 
join book using (publisherID) 
where count(book.isbn) > 2 
group by publisher.name; 
+1

Я думаю, вы хотите использовать 'HAVING count (book.isbn)> 2'. Также потеряйте псевдоним на своем столе. Просто оставьте 'ИЗ издателя' – Kermit

ответ

0

Проблема в вашем from заявлении. Правильный синтаксис:

select publisher.name as "Publisher Name", count(book.isbn) as "Book Count" 
from publisher join book 
    using (publisherID) 
group by publisher.name; 

, имеющий счетчик (book.isbn)> 2

Вы были давая publisher таблицы псевдоним Book Count, вместо подсчета голосов.

0

2 вопрос:

  1. Вы добавили псевдоним для таблицы, а не колонок.

  2. Вы не можете использовать COUNT в состоянии WHERE. Вам нужно использовать HAVING.

Попробуйте следующее:

SELECT 
    publisher.name as `Publisher Name`, 
    COUNT(book.isbn) as `Book Count` 
FROM 
    publisher 
JOIN 
    book USING (publisherID) 
GROUP BY 
    publisher.name 
HAVING 
    `Book Count` > 2 
+0

# 1, # 2 неверными. – Kermit

+0

Извините, это означает, что вы не можете использовать 'COUNT'.Что касается цитат как псевдонима, вы правы. Я не знаю, почему я думал иначе. – MichaelRushton

1

Попробуйте

SELECT MIN(p.name) AS `Publisher Name`, COUNT(b.isbn) AS `Book Count` 
    FROM publisher AS p INNER JOIN 
     book  AS b ON p.PublisherID = b.PublisherID 
GROUP BY p.publisherID 
HAVING COUNT(b.isbn) > 2 

Вот sqlfiddle

0

Вы не можете использовать COUNT в том, где, но только в SELECT. Попробуйте использовать HAVING с условиями в группе.

Смежные вопросы