SQL-ben hogyan számolhatom a DISTINCT-t több oszlopra?


Legjobb válasz

az SQL-ben a DISTINCT záradék *** használható a *** a kiválasztási lista előtt, a kimenetben vagy a *** belül egy olyan összesítő függvény (például COUNT) ismétlődő sorainak elkerülése érdekében. A második esetben, különösen a COUNT esetében, az a hatás, hogy az értékeket csak egyszer kell megismételni. Az egyik megoldás az, hogy a Greg Kemnitz által javasolt összefűzéssel, eltekintve egy apró hibától és az oszloptípusoktól és a string függvényektől függő adaptációktól a különböző sql motoroknál

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

Az egyszerű megoldás

SELECT COUNT (DISTINCT col1, col2, col3) FROM table;

a MySQL-sel működik, nem dolgozik a DB2-ben, és nem tudok más motorokról, de ez nem szabványos SQL.

Egy másik, bonyolultabb megoldás, amely hatékonyabb lehet, ha a művelet gyakori és megfelelően optimalizált, megköveteli a egy nézet

VIEW CREATE VIEW AS SELECT DISTINCT col1, col2, col3 GROUP BY col1, col2, col3; SELECT COUNT (*) FROM vw;

válasz

mysql> tábla hamis létrehozása (foo tinyint (3) nem null alapértelmezett 0, bar varchar (64) nem null alapértelmezett “”) ; Lekérdezés rendben, 0 sor érintett (0,07 mp)

mysql> beillesztés hamis értékekbe (1, “foo”), (1, “bar”), (2, “foo”), (2, “bár”), (3, “baz”), (3, “for”); Lekérdezés rendben, 6 sor érintett (0,00 mp) Rekordok: 6 ismétlés: 0 Figyelmeztetések: 0

mysql> válasszon foo, bar, count (*) hamis csoportból foo, bar szerint; + —– + —– + ———- + | foo | bár | gróf (*) | + —– + —– + ———- + | 1 | bár | 1 | | 1 | foo | 1 | | 2 | bár | 1 | | 2 | foo | 1 | | 3 | baz | 1 | | 3 | mert | 1 | + —– + —– + ———- + 6 sor a készletben (0,00 mp)

mysql> beillesztés hamis értékekbe (1, “foo “), (1,” bar “), (2,” foo “), (2,” bar “), (3,” baz “), (3,” for “); Lekérdezés rendben, 6 sor érintett (0,00 mp) Rekordok: 6 ismétlés: 0 Figyelmeztetések: 0

mysql> válasszon foo, bar, count (*) hamis csoportból foo, bar szerint; + —– + —– + ———- + | foo | bár | gróf (*) | + —– + —– + ———- + | 1 | bár | 2 | | 1 | foo | 2 | | 2 | bár | 2 | | 2 | foo | 2 | | 3 | baz | 2 | | 3 | mert | 2 | + —– + —– + ———- + 6 sor a készletben (0,00 mp)

mysql>

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük