DISTINCT AND COUNT (*) = 1 не работает на SQL - PullRequest
1 голос
/ 14 октября 2019

Мне нужно показать идентификатор (который уникален в каждом случае) и имя, которое иногда отличается. В моем коде я хочу показать только имена, ЕСЛИ они уникальны.

Я пробовал как с различными, так и с числом (*) = 1, моя проблема не решается ничем.

SELECT DISTINCT id, name
FROM person
GROUP BY id, name
HAVING count(name) = 1;

Результатвсе еще показывает имена несколько раз

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Под «уникальным» я предполагаю, что вы имеете в виду имена, которые появляются только один раз. Это не то, что означает «отличный» в SQL;использование Different - удаление дубликатов (для подсчета или в наборе результатов).

Если это так:

SELECT MAX(id), name
FROM person
GROUP BY name
HAVING COUNT(*) = 1;
2 голосов
/ 14 октября 2019

Если ваша СУБД поддерживает это, вы можете использовать оконную функцию:

SELECT id, name
FROM (
  SELECT id, name, COUNT(*) OVER(PARTITION BY name) AS NameCount -- get count of each name
  FROM person
) src
WHERE NameCount = 1

Если нет, вы можете сделать:

SELECT id, name
FROM person
WHERE name IN (
  SELECT name
  FROM person
  GROUP BY name
  HAVING COUNT(*) = 1 -- Only get names that occur once
)
...