Как выбрать уникальные записи по SQL


когда я выполняю "SELECT * FROM table" я получил результаты, как показано ниже:

1 item1 data1
2 item1 data2
3 item2 data3
4 item3 data4

Как вы можете видеть, есть DUP записи из column2 (item1 дублируются). Так как же я мог просто получить такой результат:

1 item1 data1
2 item2 data3
3 item3 data4

из дубликата возвращается только одна запись вместе с остальными уникальными записями.

7 56
sql

7 ответов:

можно использовать SELECT DISTINCT или GROUP BY для этого.

SELECT DISTINCT a, c
FROM table_c

или

SELECT a, b
FROM table_c
GROUP BY a, b

GROUP BY будет более полезно, если вы хотите использовать некоторые статистические функции, такие как COUNT() или SUM()

SELECT a, b, count(*)
FROM table_c
GROUP BY a, b

SELECT a, b, sum(d)
FROM table_c
GROUP BY a, b

Если вам нужно только удалить дубликаты, то используйте DISTINCT. GROUP BY должен использоваться для применения агрегатных операторов к каждой группе

GROUP BY v DISTINCT

Это зависит от того, какую строку вы хотите вернуть для каждого уникального элемента. Ваши данные, похоже, указывают минимальное значение данных, поэтому в этом экземпляре для SQL Server.

SELECT item, min(data)
FROM  table
GROUP BY item

Я считаю, что если я не могу использовать DISTINCT по какой-либо причине, то GROUP BY будет работать.

чтобы получить все столбцы в вашем результате вам нужно разместить что-то вроде:

SELECT distinct a, Table.* FROM Table

это место a как первый столбец, так и остальные будут все столбцы в том же порядке, что и ваше определение. Это, колонка a будет повторяться.

просто используйте внутреннее соединение, потому что group by не будет работать с несколькими столбцами, не содержащимися ни в одной агрегатной функции.

SELECT a.*
FROM yourtable a
INNER JOIN 
  (SELECT yourcolumn,
    MIN(id) as id
  FROM yourtable 
  GROUP BY yourcolumn
) AS b
  ON a.yourcolumn= b.yourcolumn
  AND a.id = b.id;

Выберите Eff_st от ( выберите EFF_ST, ROW_NUMBER () over(PARTITION BY eff_st) XYZ - из АВС.CODE_DIM

) где XYZ= 1 заказ по EFF_ST извлечь первые 5 строк только