powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Отфильтровать выборку с учетом повторяющихся значений
17 сообщений из 17, страница 1 из 1
Отфильтровать выборку с учетом повторяющихся значений
    #39619694
finalman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Помогите, пожалуйста, с правильным селектом.

Есть результат селекта из нескольких таблиц в виде:

Col_1| Col_2 | Col_3 | Col_4
1155 | 500001 | 1 | 222
1155 | 300001 | 1 | 333
1155 | 500001 | 2 | 444
1155 | 300001 | 2 | 555
1156 | 700001 | 3 | 666

Нужно из этой выборки отобрать строки только с уникальным значением в Col_3.
В случае, если значения в Col_3 повторяются, то брать ту строку, где соответствующее ей значение в Col_2 меньше.
Т.е. результат будет такой:


Есть результат селекта из нескольких таблиц в виде:

Col_1| Col_2 | Col_3 | Col_4
1155 | 300001 | 1 | 333
1155 | 300001 | 2 | 555
1156 | 700001 | 3 | 666
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39619853
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39620143
finalman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, здравствуйте, спасибо за ответ!!

Никак не могу понять какой из указанных по ссылке вариантов лучше применить к моему случаю.
Вроде как должно быть совсем просто, т.к. таблица у меня одна.
Можете, пожалуйста, хоть примерно подсказать как будет выглядеть такой запрос?
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39620163
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
finalmanне могу понять какой из указанных по ссылке вариантов лучше применить к моему случаюА чё тут понимать? У тебя источник данных - запрос. То есть две копии в запросе - плохо, а индексы отсутствуют. T3/T4 отпадают, надо выбирать из T1/T2, и когда выберешь - или реализуешь на переменных, или используй бабкин метод.
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39620251
finalman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все равно никак не получается составить правильный запрос.
Помогите, пожалуйста.
Например, у меня будет возможность исходные данные записать в отдельную таблицу и обращаться только к ней одной.
Как тогда из неё выбрать только уникальные значения по одному из полей (Col_3)
с условием выбора по минимальному значению в соседнем поле(Col_2)?

Т.е. из таблицы:
Col_1| Col_2 | Col_3 | Col_4
1155 | 500001 | 1 | 222
1155 | 300001 | 1 | 333
1155 | 500001 | 2 | 444
1155 | 300001 | 2 | 555
1156 | 700001 | 3 | 666

Получить:
Col_1| Col_2 | Col_3 | Col_4
1155 | 300001 | 1 | 333
1155 | 300001 | 2 | 555
1156 | 700001 | 3 | 666
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39620298
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
finalmanНапример, у меня будет возможность исходные данные записать в отдельную таблицу и обращаться только к ней одной.Тогда ограничение на однопроходность снимается, и можно использовать любой из методов. Просто возьми решение и аккуратно поиск-замена по всем именам таблиц и полей...
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39620513
finalman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может кому-то тоже будет полезно.
Получилось сделать следующим образом.

select * from table
where col_2 in
(select A from
select MIN (col_2) as A, col_3 from table
group by col_3))
and col_3 in
(select B from
(select MIN (col_2), col_3 as B from table
group by col_3)
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39620520
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
finalmanПолучилось сделать следующим образом.

select * from table
where col_2 in
(select A from
select MIN (col_2), col_3 from table
group by col_3))
and col_3 in
(select B from
(select MIN (col_2), col_3 as B from table
group by col_3)
Решение ошибочное. Оно не гарантирует, что и А, и В будут взяты из одной и той же записи подзапроса.
Правильно - так:

Код: sql
1.
2.
3.
4.
5.
select * 
from table
where (col_2,col_3) in (select MIN (col_2) as A, col_3 
                        from table
                        group by col_3)


Следует учитывать, что при наличии дубликатов будут выведены все они, а не один...
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39620596
finalman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо!
Скорректировал по рекомендации, заодно и отрабатывать скрипт стал быстрее :)
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39622829
finalman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Появилось новое условие для выборки, пока никак не получается реализовать.
Может сможете подсказать?

Нужно в таблице отобрать значения где по столбцам А, B, С значения повторяются, но при этом по D различаются.

Т.е. из таблицы:
Col_A | Col_B | Col_C | Col_D | Col_ E
ffffffff | 22222 | 1000 | 158 | red
ffffffff | 33333 | 1000 | 216 | yellow
eeeee | 22222 | 1000 | 706 | blue
eeeee | 33333 | 1000 | 706 | white

Получить:
Col_A | Col_B | Col_C | Col_D | Col_ E
ffffffff | 22222 | 1000 | 158 | red
ffffffff | 33333 | 1000 | 216 | yellow
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39622990
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
finalmanотобрать значения где по столбцам А, B, С значения повторяются, но при этом по D различаютсяНу и группируешь в подзапросе по А, B, С, а по D берёшь максимум либо минимум...
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39623034
finalman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, тут немного другая ситуация.
Если возьму MAX или MIN значение, то только его и получу.
Мне же нужно получить оба если они не равны и не получить ничего если совпадают.
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39623039
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЯННП. Объясните в своём примере:

finalmanТ.е. из таблицы:
Col_A Col_B Col_C Col_D Col_ Effffffff 22222 1000 158 red ffffffff 33333 1000 216 yelloweeeee 22222 1000 706 blueeeeee 33333 1000 706 white

Получить:
Col_A Col_B Col_C Col_D Col_ Effffffff 22222 1000 158 red ffffffff 33333 1000 216 yellow
для КАЖДОЙ исходной записи, почему она оставлена или отброшена. ПОДРОБНО.
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39623065
finalman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, простите!!
Обнаружил что в примере ошибся.
У меня в B значения были разные а должны быть одинаковые.
Вот так получается.

Col_A | Col_B | Col_C | Col_D | Col_ E
ffffffff | 22222 | 1000 | 158 | red__________нужно оставить, т.к. есть другая запись где совпадают значения A+B+C, но отличается в D
ffffffff | 22222 | 1000 | 216 | yellow________нужно оставить, т.к. есть другая запись где совпадают значения A+B+C, но отличается в D
eeeee | 33333 | 1000 | 706 | blue___________нужно убрать, т.к. есть другая запись где совпадают значения A+B+C+D
eeeee | 33333 | 1000 | 706 | white__________нужно убрать, т.к. есть другая запись где совпадают значения A+B+C+D
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39623079
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
finalmanВот так получается.Над полем ввода есть куча кнопок с тегами. А у Вас получается нечитаемая лапша.
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39623084
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
SELECT *
FROM `table`
GROUP BY a, b, c, d
HAVING COUNT(*) = 1


Если в таблице могут быть полные дубликаты (т.е. включая и поле Е), и нужно в этом случае вывести одну копию такой записи, следует заменить COUNT(*) на COUNT(DISTINCT E).
...
Рейтинг: 0 / 0
Отфильтровать выборку с учетом повторяющихся значений
    #39623329
finalman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо!
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Отфильтровать выборку с учетом повторяющихся значений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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