sql >> Database teknologi >  >> RDS >> Mysql

GROUP BY fjerner ikke dubletter

GROUP BY "fjerner ikke dubletter". GROUP BY giver mulighed for aggregering. Hvis alt du ønsker er at kombinere duplikerede rækker, skal du bruge SELECT DISTINCT.

Hvis du har brug for at kombinere rækker, der er dublerede i nogle kolonner, skal du bruge GROUP BY, men du skal angive, hvad du skal gøre med de andre kolonner. Du kan enten udelade dem (ved ikke at angive dem i SELECT-sætningen) eller aggregere dem (ved hjælp af funktioner som SUM, MIN og AVG). For eksempel:

SELECT watch.watch_id, COUNT(rec.street_number), MAX(watch.watch_date)
... GROUP by watch.watch_id

REDIGER

OP bad om en afklaring.

Overvej "visningen" - alle data sat sammen af ​​FROM'erne og JOIN'erne og WHERE'erne - kalder det V. Der er to ting, du måske ønsker at gøre.

For det første kan du have helt duplikerede rækker som du ønsker at kombinere:

a b c
- - -
1 2 3
1 2 3
3 4 5

Så skal du blot bruge DISTINCT

SELECT DISTINCT * FROM V;

a b c
- - -
1 2 3
3 4 5

Eller du kan have delvist duplikerede rækker som du ønsker at kombinere:

a b c
- - -
1 2 3
1 2 6
3 4 5

De første to rækker er "det samme" i en eller anden forstand, men klart forskellige i en anden forstand (især ville de ikke kombineres med SELECT DISTINCT). Du skal beslutte, hvordan du kombinerer dem. Du kan kassere kolonne c som uvigtig:

SELECT DISTINCT a,b FROM V;

a b
- -
1 2
3 4

Eller du kan udføre en form for aggregering på dem. Du kan tilføje dem:

SELECT a,b, SUM(c) "tot" FROM V GROUP BY a,b;

a b tot
- - ---
1 2 9
3 4 5

Du kan tilføje vælg den mindste værdi:

SELECT a,b, MIN(c) "first" FROM V GROUP BY a,b;

a b first
- - -----
1 2 3
3 4 5

Eller du kan tage middelværdien (AVG), standardafvigelsen (STD) og enhver af en masse andre funktioner, der tager en masse værdier for c og kombinere dem til én.

Hvad der egentlig ikke er en mulighed, er bare at gøre ingenting. Hvis du blot angiver de ugrupperede kolonner, vil DBMS enten give en fejl (Oracle gør det -- det rigtige valg, imo) eller vælge en værdi mere eller mindre tilfældigt (MySQL). Men som Dr. Peart sagde:"Når du vælger ikke at bestemme, har du stadig truffet et valg."



  1. mysqlimport:Fejl:1045, Adgang nægtet

  2. Produktionsdatabasen er ikke konfigureret

  3. Hvordan trækker man data fra en MySQL-database ind i et stylesheet i sin egen fil/mappe?

  4. Hent data fra mysql ved hjælp af php