У меня есть таблица достойного размера с 20 + столбцами и почти 3 миллионами строк, и я хочу выбрать все уникальные значения из одного столбца и ввести их во вновь созданную таблицу. После исследования я попытался использовать это с использованием как DISTINCT, так и GROUP BY, но оба они производят повторяющиеся значения. Кроме того, я установил новый столбец в новой таблице в качестве Первичного ключа, который, как я полагаю, не допускает дублирования значений.SQL SELECT DISTINCT и GROUP Оба производят дубликаты
Я определенно новичок здесь, поэтому, возможно, есть что-то простое, я делаю неправильно. Вот некоторые примеры кода:
Использование GROUP BY
INSERT INTO ResourceGroups(ResourceGroup)
SELECT ResourceGroup
FROM dbo.UsageData
WHERE ResourceGroup IS NOT NULL
GROUP BY ResourceGroup
Использование DISTINCT
INSERT INTO ResourceGroups(ResourceGroup)
SELECT DISTINCT ResourceGroup
FROM dbo.UsageData
WHERE ResourceGroup IS NOT NULL
Результаты обоих из них, кажется, то же самое. Вот пример из первых нескольких строк:
ResourceGroup
aiiInnovationTime
Api-Default-Central-US
Api-Default-Central-US
applicationinsights
applicationinsights
azurefunctions-southeastasia
azurefunctions-southeastasia
Запрос в результате 532 строк, и он явно устранены некоторые дубликаты после консолидации вниз с 3 млн. Тем не менее, здесь, очевидно, все еще есть дубликаты, и они также успешно вставлены в столбец первичного ключа, который не должен дублировать. Кроме того, есть пустая строка, несмотря на мою попытку отфильтровать NULL (хотя, может быть, есть место или что-то там?). Излишне говорить, что я немного смущен тем, что я делаю неправильно, и буду очень признателен за любую помощь, которую может предоставить это сообщество!
Для повторяющихся значений вы можете проверить начальные и/или конечные пробелы. –
Что произойдет, если вы удалите строку «INSERT INTO» и просто запустите «SELECT» (в любом из случаев)? Какие строки вы вернетесь? Это то, чего вы ожидали? (Первое, вероятно, не удалось, потому что у вас нет функции агрегации в вашем SELECT. Что показывает вторая?) –
Совет сегодня: используйте GROUP BY, когда задействованы агрегированные функции, иначе используйте SELECT DISTINCT для устранения дубликатов. – jarlh