2016-01-20 3 views
-2

У меня есть следующие таблицы:SQL QUERY SELECT ... COUNT (...)> 5

USER(iduser, fname, lname); 

TRANSACTION(idtrans,iduser,iddoc,datetrans); 

Я должен перечислить всех пользователей, которые имеют более 5 заимствованных документов, так что я сделал это:

SELECT u.fname, u.lname 
FROM USERS u, TRANSACTION t 
WHERE t.iduser=u.iduser HAVING count(t.iduser)>5; 

, но я получаю эту ошибку

не функциональная группы одногруппового

Есть ли другой способ написать этот запрос?

+3

Пожалуйста, используйте предложение Group By с предложением. –

ответ

0

Во-первых, я действительно обеспокоен таблицы под названием СДЕЛКИ, как это имеет особое значение в SQL. Я не уверен, какую базу данных вы используете, но обратите внимание, что SO's MArkdown считает, что транзакция - это ключевое слово, а не имя таблицы.

Вы не можете использовать агрегированную функцию или предложение HAVING без использования оператора GROUP BY , Попробуйте следующее:

SELECT u.fname, u.lname 
FROM USERS u, TRANSACTION t 
WHERE t.iduser=u.iduser 
GROUP BY i.fname, u.lname 
HAVING count(t.iduser)>5; 
1

Вы должны использовать GROUP BY

SELECT u.fname, u.lname 
FROM USERS u, TRANSACTION t 
WHERE t.iduser=u.iduser 
GROUP BY u.fname, u.lname 
HAVING count(t.iduser)>5; 
0

Попробуйте использовать этот запрос:

ВЫБОР u.fname, u.lname ОТ ПОЛЬЗОВАТЕЛЕЙ у INNER JOIN TRANSACTION т ON t.iduser = u.iduser ГДЕ отсчет (t.iduser)> 5;

Я просто конвертируются его использовать внутреннее соединение вместо