Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2015, 20:25   #1
ВЕчная ПОмощь
Пользователь
 
Регистрация: 12.05.2013
Сообщений: 25
По умолчанию Ошибка в SQL запросе!

Доброе время суток, изучаю БД, по заданию, нужно вывести фамилии всех читателей, имеющих максимальное количество книг.
Структуру БД прилагаю.
Ошибка, делал группировку, выводит пустые поля, подскажите, пожалуйста, где косяк?

Код:
SELECT Код_абонента, COUNT(Код_книги) AS Количество_книг
FROM Абонемент AS A1
GROUP BY Код_абонента
HAVING Количество_книг = (
SELECT MAX(Количество_книг)
FROM  Абонемент   A2 
WHERE A1.Код_абонента=A2.Код_абонента);
Вложения
Тип файла: doc структура.doc (39.5 Кб, 9 просмотров)
ВЕчная ПОмощь вне форума Ответить с цитированием
Старый 20.05.2015, 20:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Попробуй так:
Код:
SELECT Код_абонента, COUNT(Код_книги) AS Количество_книг
FROM Абонемент AS A1
GROUP BY Код_абонента
HAVING Количество_книг = (
  SELECT top 1 COUNT(Код_книги) 
  FROM Абонемент
  GROUP BY Код_абонента
  order by 1 desc
)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2015, 20:55   #3
ВЕчная ПОмощь
Пользователь
 
Регистрация: 12.05.2013
Сообщений: 25
По умолчанию

Нет, не срабатывает, все равно при запуске появляется окно "Введите значение параметра Количество_книг " , и пустые поля
ВЕчная ПОмощь вне форума Ответить с цитированием
Старый 20.05.2015, 21:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А так:
Код:
SELECT Код_абонента, COUNT(Код_книги) AS Количество_книг
FROM Абонемент AS A1
GROUP BY Код_абонента
where  COUNT(Код_книги) = (
  SELECT top 1 COUNT(Код_книги) 
  FROM Абонемент
  GROUP BY Код_абонента
  order by 1 desc
)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2015, 21:08   #5
ВЕчная ПОмощь
Пользователь
 
Регистрация: 12.05.2013
Сообщений: 25
По умолчанию

А так разве можно? Я попробовал, пишет ошибку синтаксиса "where COUNT(Код_книги) = ..."
поставил вместо where -> HAVING, но получилось тоже самое...
Я никак не могу понять, где косяк, и почему запрос при выполнении выводит это окно ввода...

Последний раз редактировалось ВЕчная ПОмощь; 20.05.2015 в 22:23.
ВЕчная ПОмощь вне форума Ответить с цитированием
Старый 21.05.2015, 07:30   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Косяк в том что поле Количество_книг агрегатное, и не может быть использовано в подзапросах. Вот его как-то нужно заменить.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.05.2015, 11:09   #7
ВЕчная ПОмощь
Пользователь
 
Регистрация: 12.05.2013
Сообщений: 25
По умолчанию

Ну я же присваиваю новое имя этому полю? И работаю с новым именем, получается так... Или я не прав?
ВЕчная ПОмощь вне форума Ответить с цитированием
Старый 21.05.2015, 11:16   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

СУБД то какая?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.05.2015, 11:19   #9
ВЕчная ПОмощь
Пользователь
 
Регистрация: 12.05.2013
Сообщений: 25
По умолчанию

MS ACCESS 2007
ВЕчная ПОмощь вне форума Ответить с цитированием
Старый 21.05.2015, 11:25   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну у ACCESS есть особенности реализации. Что-то подобное для MS SQL на другой таблице естественно, нормально отработало:
Код:
SELECT NomSpr,COUNT(*) AS CountRec FROM SprMain GROUP BY NomSpr
  HAVING COUNT(*) = (SELECT TOP 1 COUNT(*) FROM SprMain GROUP BY NomSpr ORDER BY 1 DESC)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в sql-запросе olgan SQL, базы данных 2 01.10.2010 14:52
Ошибка в SQL запросе program123 БД в Delphi 11 06.12.2009 17:12
Ошибка SQL запросе. EVG44 БД в Delphi 2 21.10.2007 22:42
Ошибка в SQL запросе eremin БД в Delphi 2 23.06.2007 07:13
Ошибка в SQL запросе...!? KeyDok БД в Delphi 5 21.06.2007 09:19