powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите DISTINCT или GROUP BY
25 сообщений из 25, страница 1 из 1
Помогите DISTINCT или GROUP BY
    #39859718
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте Уважаемые!
есть таблица

id | name | value
1 | n1 | v1
2 | n2 | v1
3 | n3 | v2
4 | n4 |
5 | n5 |
6 | n6 | v6
7 | n7 | v6

Подскажите пожалуйста как выбрать записи с уникальным вхождением value, только если value заполнен?
Чтобы выборка выглядела следующим образом:

id | name | value
1 | n1 | v1
3 | n3 | v2
4 | n4 |
5 | n5 |
6 | n6 | v6

Т.е. выбрать записи, в которых value, если заполнено, то встречается первый раз, и если не заполнено вообще.

Пробовал запрос "SELECT * FROM table GROUP BY value", но в выборку попадает только первое пустое значение.
DISTINCT также не дал результатов.
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39859732
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
SELECT t1.*
FROM source t1
WHERE NOT EXISTS ( SELECT 1
                   FROM source t2
                   WHERE t1.value = t2.value
                     AND t1.id > t2.id )
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39859740
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

А комментарий можно? Как это работает что такое source?
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39859745
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir_KZNчто такое source?Таблица исходная, которая с данными, которая на скриншоте.

Vladimir_KZNКак это работаетПросто переведи с английского на русский.
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39859750
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял, это моя таблица). Выполнил ваш запрос, результат:
id | name | value
1 | n1 | v1
3 | n3 | v2
4 | n4
6 | n6 | v6

Делает тоже самое, что и мой запрос, берет только первое вхождение с пустым value, а должен брать все
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39859753
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Спасибо за ответ, но не работает, в выборке должны участвовать все записи с пустым value
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39859763
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Добавил в конце вашего варианта дополнительное условие OR value = '' и заработало!
В итоге получился такой запрос
SELECT t1.*
FROM source t1
WHERE NOT EXISTS ( SELECT 1
FROM source t2
WHERE t1.value = t2.value
AND t1.id > t2.id)
OR t1.value = ''
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39859767
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir_KZNне работает, в выборке должны участвовать все записи с пустым value
Бред. Всё работает. Если value действительно пусто, т.е. NULL: fiddle .
А вот если там строка нулевой длины... но кто ж виноват, что некоторые товарищи не могут корректно сформулировать задачу?
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39859770
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir_KZNДелает тоже самое, что и мой запрос...
Не то же самое. Ваш запрос берет произвольные значения из группы, а по условию требуется первая запись.
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39859773
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем огромное! Дай вам бог здоровья! Все получилось!
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39859964
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Новая проблема, внедрил данное решение, но по времени выполнение увеличилось более чем в 5 раз, можно ли как-то оптимизировать данный запрос или выполнить задачу другим способом?
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39859971
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может все таки через DISTINCT или GROUP BY возможно решить данную задачу?
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39859972
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, Не правильно выразился, не пустое, а строка нулевой длины. Простите!
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39859988
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сформировал такой запрос
SELECT * FROM `source` GROUP BY IF ((value != ''), value, id) ORDER BY id ASC
Скажите не сильно ли колхозно получилось?
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39860030
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir_KZNпо времени выполнение увеличилось более чем в 5 разНебось индексов нету...

Vladimir_KZNне сильно ли колхозно получилось?Это ж фулскан гарантированный... уж лучше на UNION перепиши.
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39860126
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaVladimir_KZNпо времени выполнение увеличилось более чем в 5 разНебось индексов нету...

Vladimir_KZNне сильно ли колхозно получилось?Это ж фулскан гарантированный... уж лучше на UNION перепиши.

id - первичный ключ. Подскажите как переписать на union? Просто сам запрос большой, здесь я упростил его до определенной проблемы. В запросе много LEFT JOIN-ов с дополнительной выборкой из других таблиц
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39860157
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir_KZNкак переписать на union?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT t1.*
FROM source t1
WHERE NOT EXISTS ( SELECT 1
                   FROM source t2
                   WHERE t1.value = t2.value
                     AND t1.id > t2.id )
UNION ALL

SELECT t1.*
FROM source t1
WHERE t1.value = ''



Vladimir_KZNсам запрос большой, здесь я упростил его до определенной проблемы. В запросе много LEFT JOIN-ов с дополнительной выборкой из других таблиц
Версия сервера какая? только ТОЧНО.
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39860169
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaВерсия сервера какая? только ТОЧНО.
На рабочем сервере MySQL 5.7.27-0ubuntu0.16.04.1
На тестовой среде MySQL 5.6
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39860182
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT t1.*
FROM source t1
WHERE NOT EXISTS ( SELECT 1
                   FROM source t2
                   WHERE t1.value = t2.value
                     AND t1.id > t2.id )
UNION ALL

SELECT t1.*
FROM source t1
WHERE t1.value = ''



По-моему добавление еще одного SELECT не ускорит выполнение запроса. Поясните пожалуйста если ошибаюсь.
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39860194
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы ошибаетесь. Проверьте.
Для ускорения создайте индекс (value, id), если это возможно.

Vladimir_KZNНа рабочем сервере MySQL 5.7.27-0ubuntu0.16.04.1
На тестовой среде MySQL 5.6
Хреново, CTE недоступны. Подумайте об обновлении до восьмёрки, сколько можно на седой древности-то работать?
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39860208
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaВы ошибаетесь. Проверьте.
Проверил, ваш запрос выполняется 0,0017, мой 0,0005
AkinaДля ускорения создайте индекс (value, id), если это возможно.
Думаю индекс поменять не возможно.
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39860223
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir_KZNСформировал такой запрос
SELECT * FROM `source` GROUP BY IF ((value != ''), value, id) ORDER BY id ASC
Скажите не сильно ли колхозно получилось?
Уже писал: ваш запрос некорректен. Вам нужно получить первые записи в группах, а запрос возвращает случайные значения полей из групп.
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39860261
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir_KZNваш запрос выполняется 0,0017, мой 0,0005Это ни о чём.

Vladimir_KZNиндекс поменять не возможноЧто значит "поменять"???
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39860335
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
paver,

Не правильно выразился, давайте считать что нужно взять произвольное. Вопрос то не в этом PAVER
...
Рейтинг: 0 / 0
Помогите DISTINCT или GROUP BY
    #39860338
Vladimir_KZN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaVladimir_KZNваш запрос выполняется 0,0017, мой 0,0005Это ни о чём.

При внедрении запроса в рабочую среду с выборкой из 2000 записей ваш увеличивает скорость загрузки страницы до 5 секунд, мой - около 1 секунды.
Понятно что тысячные секунды при выборке из 8 записей это ни о чем, но при внедрении на сайт разница значительна.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите DISTINCT или GROUP BY
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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