Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Получить список пользователей. Взявших менее 3 книг, но более 1. / 7 сообщений из 7, страница 1 из 1
29.07.2016, 15:58
    #39282919
mandarina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить список пользователей. Взявших менее 3 книг, но более 1.
Имеется две таблицы Пользователи (код_пользователя, фамилия), Выданные книги (код_книги, код_пользователя, дата_выдачи). Необходимо получить список пользователей. Взявших менее 3 книг, но более 1.
...
Рейтинг: 0 / 0
29.07.2016, 16:09
    #39282937
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить список пользователей. Взявших менее 3 книг, но более 1.
Код: sql
1.
2.
3.
4.
5.
6.
select /**/ from users 
join (
  select user_id, count(0) as books_count from user_books 
  group by user_id
  having books_count > 1 and books_count < 3 -- same as books_count = 2
) t on t.user_id = users.id
...
Рейтинг: 0 / 0
29.07.2016, 16:24
    #39282963
mandarina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить список пользователей. Взявших менее 3 книг, но более 1.
Melkij, а вы не могли бы объяснить действия?
...
Рейтинг: 0 / 0
29.07.2016, 16:29
    #39282971
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить список пользователей. Взявших менее 3 книг, но более 1.
В подзапросе группируются id пользователя и подсчитывается число встреченных строк в таблице для этого юзера. С помощью having, который работает после группировки, в отличии от where, отфильтровываем количество книг больше 1 и меньше 3.
Внешний запрос - вытянуть данные этих юзеров из таблицы пользователей.
...
Рейтинг: 0 / 0
29.07.2016, 16:33
    #39282980
mandarina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить список пользователей. Взявших менее 3 книг, но более 1.
Melkij, а синтаксис для командной строки будет такой же?
...
Рейтинг: 0 / 0
29.07.2016, 18:17
    #39283074
mandarina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить список пользователей. Взявших менее 3 книг, но более 1.
Melkij, а как можно отфильтровать по полю количество книг, если его нет?
...
Рейтинг: 0 / 0
01.08.2016, 07:11
    #39283604
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить список пользователей. Взявших менее 3 книг, но более 1.
mandarinaа как можно отфильтровать по полю количество книг, если его нет?а это поле - оно как пресловутый суслик: ты его не видишь, а он есть :)
Не путайте where и having. Where работает с полями исходных таблиц, и дествительно не может фильтровать "виртуальные" поля. Но having работает с полями, полученными в секции select. Количество книг там присутствует.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Получить список пользователей. Взявших менее 3 книг, но более 1. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]