sql >> Databasteknik >  >> RDS >> Database

Hur hittar man dubbletter av rader i SQL?

Problem:

Du har dubbletter av rader i din tabell, där endast ID:n är unika. Hur hittar du dessa dubbletter?

Exempel:

Vår databas har en tabell som heter product med data i följande kolumner:id , name och category .

id namn kategori
1 biff kött
2 kaka godis
3 d>biff kött
4 fläsk kött
5 kaka godis
6 kaka godis

Låt oss hitta dubbletter av namn och produktkategorier. Du kan hitta dubbletter genom att gruppera rader med COUNT aggregatfunktion och specificera en HAVING sats för att filtrera rader.

Lösning:

SELECT  name,
 category,
FROM product
GROUP BY name, category
HAVING COUNT(id) >1;

Den här frågan returnerar endast dubbletter av poster – sådana som har samma produktnamn och kategori:

namn kategori
biff kött
kaka godis

Det finns två dubbletter av produkter i vår tabell:biff från köttkategorin och tårta från godiskategorin. Den första produkten upprepas två gånger i tabellen, medan den andra visas tre gånger.

Diskussion:

För att välja dubbletter av värden måste du skapa grupper av rader med samma värden och sedan välja grupperna med fler än ett. Du kan uppnå det genom att använda GROUP BY och en HAVING klausul.

Det första steget är att skapa grupper av poster med samma värden i alla icke-ID-kolumner (i vårt exempel, name och category ). Du gör detta med en GROUP BY klausul. Efter GROUP BY nyckelord, anger du namnen på de kolumner du vill använda för gruppering. Vi exkluderar id kolumn eftersom det är vår tabells primärnyckel; per definition kommer varje rad att ha ett annat värde under den kolumnen. Om vi ​​skulle inkludera det, skulle vi inte kunna upptäcka dubbletter!

Vi vill hitta grupper med mer än en rad; sådana grupper måste innehålla en dubblett per definition, så länge vi har grupperat på rätt kolumner. För att göra detta använder vi en HAVING klausul. Villkoret vi anger är att antalet element i gruppen—COUNT(id) —måste vara större än ett:COUNT(id) > 1 . Kom ihåg att HAVING låter dig filtrera grupper; WHERE är för att filtrera enskilda rader.


  1. psycopg2 hur hantera TypeError:inte alla argument konverteras under strängformatering

  2. Vilka är SQL-begränsningar och dess olika typer?

  3. Miljövariabeln LD_DEBUG

  4. Anropar ett PHP-skript från en MySQL-utlösare