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

MySQL-gruppe efter og spring over gruppering på nulværdier

Hvis vi har en unik kolonne (eller sæt af kolonner) i tabellen, så kan vi tilføje endnu et udtryk til GROUP BY .

Udtrykket skal returnere en unik værdi for hver række, når collection_id er nul. Ellers returnerer den en konstant.

Forudsat at vi har et unikt id kolonne i tabellen, så kan vi gøre noget som dette:

... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
 

Det andet udtryk i GROUP BY returnerer en konstant værdi 0 når collection_id er ikke nul. Men det returnerer en unik værdi for hver række, når collection_id er null.

Bemærk at id her er blot en reference til en kolonne, der er defineret til at være unik i tabellen. PRIMÆR NØGLEN er en god kandidat. Hvis vi ikke har et unikt indeks på en enkelt kolonne, så kan vi gentage den samme type udtryk for hver kolonne i vores unikke begrænsning, eller for ethvert sæt udtryk, der med garanti er unikke i hver række.

... GROUP BY collection_id , IF(collection_id IS NULL, col1, '') , IF(collection_id IS NULL, col2, NULL) , IF(collection_id IS NULL, col3, collection_id)

Alternativt kan vi bruge et udtryk, der genererer en unik værdi:

... GROUP BY IFNULL(collection_id,UUID())
 


  1. Sådan renser du rå SQL i Rails 4

  2. MySQL:Hvordan søger man efter stavevarianter? (murrays, murrays osv.)

  3. Større end og mindre end MySql-forespørgsel mislykkedes med decimalfelt

  4. Hvordan kopierer man csv-datafil til Amazon RedShift?