# #sql #google-cloud-platform
Вопрос:
Я знаю, что если я хочу иметь значения distict в случае дубликатов, я могу использовать DISTINCT. Но я хочу, чтобы, если в одном из столбцов есть повторяющееся значение, мне не нужна никакая строка из этого .
напр..
ИДЕНТИФИКАТОР ЗАКАЗА | Имя |
---|---|
ОРД1 | Аарон |
ОРД2 | боб |
ОРД3 | Нести |
ОРД1 | Дэнни |
ОРД2 | Эмили |
ОРД2 | Откровенный |
В этом случае я просто хочу, чтобы результат был таким:
ИДЕНТИФИКАТОР ЗАКАЗА | Имя |
---|---|
ОРД3 | Нести |
Так как ОРД1 и ОРД3 повторяются.
Комментарии:
1.
WHERE NOT EXISTS(...)
2. Я удалил несогласованные теги базы данных. Пожалуйста, отмечайте только ту базу данных, которую вы действительно используете.
Ответ №1:
Привет, я попробовал это, и это сработало для меня.
SELECT Order_Id, MAX(Name) as Name FROM table GROUP BY Order_Id HAVING COUNT(*) = 1;
Ответ №2:
Вы можете использовать агрегацию с GROUP BY
и указать условие для групп с HAVING
:
SELECT * FROM tbl
GROUP BY order_id
HAVING count(*) = 1;
Комментарии:
1. Будет работать только для повторяющихся значений order_id.
2. @стефан, select * выдает ошибку, которую я также должен сгруппировать по другим столбцам. Но я хочу предоставить все столбцы для внешнего запроса из этого. что-то вроде этого: выражение звездного расширения ссылается на столбец CORRELATION_ID, который не сгруппирован и не агрегирован
Ответ №3:
Лучшее, что я могу придумать, это:
SELECT * FROM tbl
WHERE name NOT IN (SELECT name FROM tbl GROUP BY name HAVING count(name) > 1) AND order_id NOT IN (SELECT order_id FROM tbl GROUP BY order_id HAVING count(order_id) > 1)
Комментарии:
1. Не было бы разумнее просто сгруппировать по обоим столбцам в одном подзапросе? Несмотря на это, у меня не складывается впечатления, что это имя имеет отношение к этому делу.
2. Если я сгруппирую по обоим столбцам, строки типа (ORD1, «Джек») и (ORD2, «Джек») или строки типа (ORD1, «Джек») и (ORD1, «Джилл») не будут отфильтрованы (в зависимости от того, в каком порядке вы группируетесь). И вопрос звучит так: «Но я хочу, чтобы, если в одном из столбцов есть повторяющееся значение, мне не нужна никакая строка из этого». Там довольно конкретно говорится о том, что обе колонки имеют отношение к делу.
3. Конечно, это был глупый комментарий о группировке. Но другой момент был законным: существует ровно одна конкретная колонка, имеющая отношение к делу, а не какая- либо из нескольких.
Ответ №4:
NOT EXISTS
это типичный подход:
select t.*
from t
where not exists (select 1 from t t2 where t2.order_id = t.order_id and t2.name <> t.name);