Найти всех пользователей с уникальной фамилией - PullRequest
1 голос
/ 04 апреля 2020

У меня есть таблица users.

mysql> SELECT * FROM `actors`;
+-----------+------------+------------+------------+
| actors_id | first_name | last_name  | dob        |
+-----------+------------+------------+------------+
|         1 | name1      | lastname1  | 1989-06-01 |
|         2 | name2      | lastname2  | 1989-05-02 |
|         3 | name3      | lastname2  | 1989-06-03 |
+-----------+------------+------------+------------+

Я написал запрос sql, который отображает всех пользователей с уникальной фамилией

SELECT MAX(a.first_name), a.last_name
FROM actors AS a
GROUP BY a.last_name
HAVING COUNT(DISTINCT a.first_name) = 1;

, скажите, почему мой запрос удаляет свернутые пользователи name2 и name3? HAVING COUNT(DISTINCT u.first_name) = 1;

Как это работает? помогите понять как это работает

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

при запуске этого запроса

SELECT MAX(a.first_name), a.last_name,COUNT(DISTINCT a.first_name)
FROM actors AS a
GROUP BY a.last_name

result:
+-------------------------+------------+----------------------------------+
| MAX(a.first_name)       | last_name  |    COUNT(DISTINCT a.first_name)  |
+-------------------------+------------+----------------------------------+
| name1                   | lastname1  |             1                    |
| name2                   | lastname2  |             2                    |
+-------------------------+------------+----------------------------------+


Now 

HAVING COUNT(DISTINCT u.first_name) = 1;

then:


SELECT MAX(a.first_name), a.last_name,COUNT(DISTINCT a.first_name)
FROM actors AS a
GROUP BY a.last_name
HAVING COUNT(DISTINCT a.first_name) = 1;


 +-------------------------+------------+---------------------------------+
| MAX(a.first_name)       | last_name  |    COUNT(DISTINCT a.first_name)  |
+-------------------------+------------+----------------------------------+
| name1                   | lastname1  |             1                    |
+-------------------------+------------+----------------------------------+
1 голос
/ 04 апреля 2020

Запрос агрегируется по фамилии и подсчету количества пользователей.

Запустите эту версию запроса:

SELECT MAX(a.first_name), a.last_name,
       COUNT(DISTINCT a.first_name) as num_first_names
FROM actors AS a
GROUP BY a.last_name
HAVING COUNT(DISTINCT a.first_name) = 1;

В третьем столбце указано количество имен. Вы заметите, что это 1 для 'lastname1' и 2 для 'lastname2'.

В предложении HAVING сохраняется только значение 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...