Kuinka lasken DISTINCT SQL: ssä useisiin sarakkeisiin?


Paras vastaus

SQL: ssä DISTINCT-lauseketta voidaan käyttää *** ennen *** -luetteloa, jotta vältetään päällekkäiset rivit lähdössä tai *** *** -funktiossa, kuten COUNT. Toisessa tapauksessa, erityisesti COUNT: n kohdalla, vaikutus on harkita arvojen toistamista vain kerran. Yksi ratkaisu on, että Greg Kemnitzin ehdottamalla ketjutuksella lukuun ottamatta pientä virhettä ja mukautuksia saraketyypeistä ja merkkijonofunktioista riippuen eri sql-moottoreissa.

SELECT COUNT (DISTINCT CONCAT (col1, …. , col3)) FROM-taulukko;

Helppo ratkaisu

SELECT COUNT (DISTINCT col1, col2, col3) FROM-taulukko;

toimii MySQL: n kanssa, ei toimii DB2: ssa, enkä tiedä muista moottoreista, mutta se ei ole vakio SQL.

Toinen monimutkaisempi ratkaisu, joka voi olla tehokkaampi, jos toiminta on usein ja riittävän optimoitu, vaatii näkymä

Luo NÄKYMÄ vw ASETTUNA VALITSE EROTTAVA col1, col2, col3 RYHMÄ JAKA col1, col2, col3; SELECT COUNT (*) FW: stä;

vastaus

mysql> luo taulukon väärennös (foo tinyint (3) ei nolla oletusarvo 0, palkin varchar (64) ei nolla oletus ””) ; Kysely OK, 0 riviä vaikuttaa (0,07 sekuntia)

mysql> lisää väärennettyihin arvoihin (1, ”foo”), (1, ”bar”), (2, ”foo”), (2, ”bar”), (3, ”baz”), (3, ”for”); Kysely OK, 6 riviä vaikuttaa (0,00 s) Tietueet: 6 kaksoiskappaleet: 0 Varoitukset: 0

mysql> valitse foo, bar, count (*) väärennetystä ryhmästä foo, bar; + —– + —– + ———- + | foo | baari | määrä (*) | + —– + —– + ———- + | 1 | baari | 1 | | 1 | foo | 1 | | 2 | baari | 1 | | 2 | foo | 1 | | 3 | baz | 1 | | 3 | varten | 1 | + —– + —– + ———- + 6 riviä sarjassa (0,00 s)

mysql> lisää väärennettyihin arvoihin (1, ”foo ”), (1,” bar ”), (2,” foo ”), (2,” bar ”), (3,” baz ”), (3,” for ”); Kysely OK, 6 riviä vaikuttaa (0,00 s) Tietueet: 6 kaksoiskappaleet: 0 Varoitukset: 0

mysql> valitse foo, bar, count (*) väärennetystä ryhmästä foo, bar; + —– + —– + ———- + | foo | baari | määrä (*) | + —– + —– + ———- + | 1 | baari | 2 | | 1 | foo | 2 | | 2 | baari | 2 | | 2 | foo | 2 | | 3 | baz | 2 | | 3 | varten | 2 | + —– + —– + ———- + 6 riviä sarjassa (0,00 sekuntia)

myql>

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *