|
Сортировка NULL
|
|||
---|---|---|---|
#18+
Здравствуйте. На курсе https://learndb.ru выполняю такую задачу: Посчитай статистику по руководителям (employee.manager_id) в магазинах. Выведи следующие данные: store_name - название магазина; manager_full_name - имя и фамилия руководителя, разделенные пробелом; amount_employees - количество человек в подчинении. Если в магазине есть сотрудники, у которых нет руководителя (manager_id is null), в результате должна быть строка, в которой manager_full_name принимает значение NULL, а amount_employees равно количеству сотрудников без руководителя в магазине. Отсортируй результат по названию магазина, затем по manager_full_name. Построил запрос: SELECT s.name as store_name, concat(e1.first_name, ' ', e1.last_name) as manager_full_name, count(e.employee_id) as amount_employees FROM store s JOIN employee e ON e.store_id = s.store_id LEFT JOIN employee e1 ON e1.employee_id = e.manager_id GROUP BY store_name, manager_full_name ORDER BY store_name, manager_full_name Мой результат совпадает с ожидаемым, но при сортировке по возрастанию manager_full_name, которое получаю конкатенацией имени и фамилии, NULL значения идут вначале (что логично), а должны идти в конце (согласно курсу). Подскажите пожалуйста где сделал ошибку. Делать по убыванию DESC нет смысла, так как хотя NULL уходит вниз, manager_full_name должны идти по возрастанию. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2021, 23:49 |
|
Сортировка NULL
|
|||
---|---|---|---|
#18+
Не подходит. В условии четко прописано что сортировать можно только по названию магазина, затем по manager_full_name. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2021, 23:52 |
|
Сортировка NULL
|
|||
---|---|---|---|
#18+
vsg-good Не подходит. В условии четко прописано что сортировать можно только по названию магазина, затем по manager_full_name. А что именно не подходит? Покажите что пробовали. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2021, 00:02 |
|
Сортировка NULL
|
|||
---|---|---|---|
#18+
Задача описана в первом сообщении. Запрос указан там же. Единственное, count(e.employee_id) надо заменить на count(*). Получается выборка (взял для примера один магазин) типа: store_name manager_full_name amount_employees Big 1 Big Ольга Вершинина 1 Big Павел Авдеев 3 А должно быть: store_name manager_full_name amount_employees Big Ольга Вершинина 1 Big Павел Авдеев 3 Big NULL 1 То есть у меня стоит пусто, а должно быть NULL. Плюс это пустое значение стоит вверху, а должно быть внизу. Проблема все же не в сортировке, а в том что у меня пустое значение, а не NULL. Когда я связываю таблицу с ней самой по id сотрудника-id менеджера, то имя-фамилия при отсутствующем значении id менеджера логично не подтягивается, но выдает не NULL значение, а пустое. P.S. Сотрудник считается руководителем для другого сотрудника, если его код сотрудника (employee_id) равен коду руководителя (manager_id) соответствующих сотрудников. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2021, 00:44 |
|
Сортировка NULL
|
|||
---|---|---|---|
#18+
vsg-good А должно быть: store_name manager_full_name amount_employees Big Ольга Вершинина 1 Big Павел Авдеев 3 Big NULL 1 Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2021, 07:40 |
|
Сортировка NULL
|
|||
---|---|---|---|
#18+
Пишет: column "manager_full_name" does not exist. Когда меняю manager_full_name на конкатенацию из верха запроса, запрос срабатывает, но дает тот же результат что был. Думаю, что все же неправильно сравнивать manager_full_name с null, так как запрос в принципе не присваивает ему null значение. То есть или имя-фамилия, или пусто. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2021, 09:41 |
|
Сортировка NULL
|
|||
---|---|---|---|
#18+
vsg-good Пишет: column "manager_full_name" does not exist. Когда меняю manager_full_name на конкатенацию из верха запроса, запрос срабатывает, но дает тот же результат что был. Думаю, что все же неправильно сравнивать manager_full_name с null, так как запрос в принципе не присваивает ему null значение. То есть или имя-фамилия, или пусто. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2021, 11:12 |
|
Сортировка NULL
|
|||
---|---|---|---|
#18+
Это решило проблему сортировки - пустые значения ушли вниз под имена-фамилии. Но осталась вторая проблема - по-прежнему показываются пустые значения, а должны NULL. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2021, 11:30 |
|
Сортировка NULL
|
|||
---|---|---|---|
#18+
vsg-good Это решило проблему сортировки - пустые значения ушли вниз под имена-фамилии. Но осталась вторая проблема - по-прежнему показываются пустые значения, а должны NULL. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2021, 11:54 |
|
Сортировка NULL
|
|||
---|---|---|---|
#18+
Nullif помог, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2021, 12:04 |
|
Сортировка NULL
|
|||
---|---|---|---|
#18+
vsg-good, Если правильно понял, то в первом запросе достаточно заменить выражение concat(e1.first_name, ' ', e1.last_name) на выражение e1.first_name || ' ' || e1.last_name. И всё станет сортироваться как нужно. Функция concat возвращает пробел даже если первый и третий аргументы NULL, а конкатенация через || вернет NULL если хотя бы одно из значений NULL. Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2021, 12:38 |
|
|
start [/forum/topic.php?fid=53&fpage=17&tid=1994238]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
79ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 350ms |
total: | 519ms |
0 / 0 |