SQL выбирает строки, где значение столбца уникально (появляется только один раз)

Структура данных, подобная куче, используется алгоритмом нахождения доступного распределения памяти. Ниже изложено http://www.cprogramming.com/tutorial/virtual_memory_and_heaps.html .

Когда вызывается new, он начинает искать свободный блок памяти, который соответствует размеру вашего запроса. Предположим, что такой блок памяти найден, он помечен как зарезервированный и возвращается указатель на это местоположение. Существует несколько алгоритмов для достижения этого, потому что необходимо выполнить компромисс между сканированием всей памяти для поиска наименьшего свободного блока, большего, чем размер вашего объекта, или возврата первого, где требуется память. Чтобы повысить скорость получения блока памяти, свободные и зарезервированные области памяти сохраняются в структуре данных, подобной бинарным деревьям, называемым кучей.

0
задан jarlh 19 March 2019 в 10:56
поделиться

7 ответов

Используйте коррелированный подзапрос

ДЕМО

select * from tablename a
where not exists (select 1 from tablename b where a.name=b.name having count(*)>1)

ВЫХОД:

id  name
2   Chad
4   Tim
0
ответ дан fa06 19 March 2019 в 10:56
поделиться

Вы можете использовать NOT EXISTS:

SELECT t.*
FROM table t
WHERE NOT EXISTS (SELECT 1 FROM table t1 WHERE t1.name = t.Name AND t1.id <> t.id);

. Для получения более быстрого набора результатов потребуется индекс table(id, name).

0
ответ дан Yogesh Sharma 19 March 2019 в 10:56
поделиться

Пожалуйста, попробуйте это.

SELECT 
   DISTINCT id,NAME
FROM
   tableName
0
ответ дан Hemang Aghera 19 March 2019 в 10:56
поделиться

Как насчет простой агрегации?

select any_value(id), name
from t
group by name
having count(*) = 1;

BigQuery довольно хорошо работает с агрегациями, так что это может быть довольно эффективным.

0
ответ дан Gordon Linoff 19 March 2019 в 10:56
поделиться

Вы можете использовать несколько подзапросов, чтобы извлечь то, что вам нужно.

SELECT * FROM tableName
WHERE name IN (SELECT name FROM (SELECT name, COUNT(name) FROM tableName
                                 GROUP BY name 
                                 HAVING COUNT(name) = 1) AS subQuery)
0
ответ дан Czarek 19 March 2019 в 10:56
поделиться

Использование существует и проверьте имя пользователя

   select id,name 
    from table t1 
   where exists ( select 1 from table t2 where t1.name=t2.name

    having count(*)=1
)
0
ответ дан Zaynul Abadin Tuhin 19 March 2019 в 10:56
поделиться

Ниже для стандартного SQL BigQuery и работает для любого количества столбцов без явного вызова их и не требует каких-либо присоединения или подвыборов

#standardSQL
SELECT t.*
FROM (
  SELECT ANY_VALUE(t) t
  FROM `project.dataset.table` t
  GROUP BY name
  HAVING COUNT(1) = 1
)
0
ответ дан Mikhail Berlyant 19 March 2019 в 10:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: