Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Количество строк в подзапросе / 8 сообщений из 8, страница 1 из 1
30.01.2017, 15:10
    #39394753
anuta123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество строк в подзапросе
Здравствуйте! Задача - выбрать заблокированных пользователей из таблицы, причем у разных пользователей может быть одинаковый емейл. Выбрать нужно только тех, у кого все копии емейла заблокированы (block=1). Например:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
+--------+---------------+-------+
| id     | email         | block |
+--------+---------------+-------+
| 547853 | user1@amd.net |     1 |
| 236073 | user1@amd.net |     1 |
| 126499 | user1@amd.net |     1 |
| 976314 |  user8@at.net |     1 |
+--------+---------------+-------+


эти двое должны попасть в выборку.

А эти двое нет:
Код: sql
1.
2.
3.
4.
5.
6.
7.
+--------+---------------+-------+
| id     | email         | block |
+--------+---------------+-------+
|  12568 |  user2@at.net |     1 |
| 239590 |  user2@at.net |     0 |
|  23353 | user4@еее.com |     0 |
+--------+---------------+-------+


Пыталась соорудить запрос по типу
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT id, email, block
FROM
  users AS u
WHERE
  (
    SELECT COUNT(DISTINCT(email))
    FROM users AS a
    WHERE u.email=a.email
    GROUP BY email,block
  )>1


но в ответ получаю "Subquery returns more than 1 row"... Помогите плз )
...
Рейтинг: 0 / 0
30.01.2017, 15:12
    #39394757
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество строк в подзапросе
anuta123выбрать заблокированных пользователей из таблицы, причем у разных пользователей может быть одинаковый емейл.А чем идентифицируется пользователь, если не E-mail-ом?
...
Рейтинг: 0 / 0
30.01.2017, 15:15
    #39394762
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество строк в подзапросе
Формально
Код: sql
1.
2.
3.
4.
SELECT email
FROM `table`
GROUP BY email
HAVING COUNT(*) = SUM(block)


Однако Вы говорите о ПОЛЬЗОВАТЕЛЯХ (которые, если верить описанию, идентифицируются по id), а подсчитываете УНИКАЛЬНЫЕ EMAIL.
...
Рейтинг: 0 / 0
30.01.2017, 19:06
    #39394975
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество строк в подзапросе
anuta123,
найдите уже программиста, чтобы писал вам запросы...
...
Рейтинг: 0 / 0
31.01.2017, 05:01
    #39395078
Количество строк в подзапросе
anuta123,

0) left self join anti
1) not exists подзпрос
2) как уже говорили - group by + having
3) not in подзапрос
...
Рейтинг: 0 / 0
31.01.2017, 11:52
    #39395302
anuta123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество строк в подзапросе
miksoftА чем идентифицируется пользователь, если не E-mail-ом?
Телефоном. Но это отдельная тема в сложном существующем проекте, и я вникаю лишь в то, что нужно сделать.

AkinaФормально
спасибо, то что нужно. Я вчера придумала другой:
Код: sql
1.
2.
3.
SELECT *, COUNT(*) num_emails, SUM(IF(`block`=1,1,0)) num_blocked
FROM `users`
WHERE 1 GROUP BY `email` HAVING num_emails=num_blocked


но ваш явно правильнее, да и работает быстрее
...
Рейтинг: 0 / 0
31.01.2017, 13:13
    #39395408
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество строк в подзапросе
anuta123,

Можно еще чуть проще:
Код: sql
1.
2.
3.
4.
SELECT email
FROM `table`
GROUP BY email
HAVING MIN(block)=1



А писать SELECT * неправильно, т.к. в остальных полях, кроме email, будут значения из случайной записи в пределах каждой группы.
...
Рейтинг: 0 / 0
31.01.2017, 16:57
    #39395683
anuta123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество строк в подзапросе
miksoftanuta123,

Можно еще чуть проще:
Код: sql
1.
2.
3.
4.
SELECT email
FROM `table`
GROUP BY email
HAVING MIN(block)=1



А писать SELECT * неправильно, т.к. в остальных полях, кроме email, будут значения из случайной записи в пределах каждой группы.
да, я вчера долго не могла понять почему email и id не совпадают, потом дошло )))
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Количество строк в подзапросе / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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