WedX - журнал о программировании и компьютерных науках

Выбирайте только уникальные значения

Таблицы

ID  Count
1    30
2    30
3    10
4    15
5    10
6    25

Я хочу запрос, который даст мне

4    15
6    25

в результате

08.05.2014

Ответы:


1

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

SELECT ID,  Count
FROM dbo.TableName t1
WHERE NOT EXISTS
(
   SELECT 1 FROM dbo.TableName t2
   WHERE t1.ID <> t2.ID AND t1.Count = t2.Count
)

Демо

08.05.2014
  • Обратите внимание, что и здесь у вас должен быть индекс на Count. 08.05.2014
  • @ThorstenDittmar: упомянул, что индекс был бы полезен. Однако, imho, это зависит от того, используется ли этот запрос только один раз или часто и насколько велика таблица вообще. 08.05.2014
  • Я упомянул об этом в своем ответе - кто знает, читается ли это :-) Да, это вопрос того, как часто это делается, но может ли это помешать сделать это в любом случае? 08.05.2014
  • Спасибо, Тим, я это знаю, но это простая таблица, в которой ПК, вероятно, указан в идентификаторе. Я знаю, что многие индексы с большим количеством столбцов значительно замедляют работу, но здесь, я думаю, это ускоряет поиск больше, чем замедляет вставку. 08.05.2014
  • @ThorstenDittmar: извините, я только что удалил свой комментарий только по ссылке. Для полноты картины это было так: stackoverflow.com/a/764217/284240 Я хочу добавить индекс для каждого столбца, который мне нужно где-то запросить, мне нужно будет добавить индекс для всего. 08.05.2014
  • Что ж, если у вас уже есть индекс, который значительно ограничивает количество строк перед выполнением неиндексированного поиска, я согласен, но здесь все сводится к полному сканированию таблицы без индекса, а полное сканирование таблицы вряд ли когда-либо желательно... 08.05.2014

  • 2

    Следующее должно выбрать то, что вы хотите:

    SELECT t.ID, t.[Count] 
    FROM Table t 
    WHERE 
       (SELECT COUNT(*) FROM Table t1 WHERE t1.[Count] = t.[Count]) = 1
    

    Обратите внимание, что у вас действительно должен быть индекс на Table.[Count].

    08.05.2014

    3

    вы также можете сделать это с помощью оператора группировки

    SELECT MIN(ID), Count
    FROM Table
    GROUP BY Count
    HAVING COUNT(*) = 1
    
    08.05.2014

    4

    Используйте HAVING вместе с COUNT DISTINCT, чтобы ограничить результат:

    SELECT [Id], [Count]
    FROM MyTable
    WHERE [Count] IN (
        SELECT [Count]
        FROM MyTable
        GROUP BY [Count]
        HAVING COUNT(DISTINCT [Count]) = 1
    )
    
    08.05.2014
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]