sql >> Database >  >> RDS >> Mysql

MySQL Groeperen op en groeperen op nulwaarden overslaan

Als we een unieke kolom (of reeks kolommen) in de tabel hebben, dan kunnen we een andere uitdrukking toevoegen aan de GROUP BY .

De expressie moet een unieke waarde retourneren voor elke rij wanneer collection_id is niets. Anders wordt een constante geretourneerd.

Ervan uitgaande dat we een unieke id . hebben kolom in de tabel, dan kunnen we zoiets als dit doen:

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

Die tweede uitdrukking in de GROUP BY retourneert een constante waarde 0 wanneer collection_id is niet nul. Maar het retourneert een unieke waarde voor elke rij wanneer collection_id null is.

Merk op dat id hier is slechts een verwijzing naar een kolom die is gedefinieerd als uniek in de tabel. De PRIMAIRE SLEUTEL is een goede kandidaat. Als we geen unieke index voor een enkele kolom hebben, kunnen we ditzelfde type expressie herhalen voor elke kolom in onze unieke beperking, of voor elke set expressies die gegarandeerd uniek is in elke rij.

... 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)

Als alternatief kunnen we een uitdrukking gebruiken die een unieke waarde genereert:

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


  1. PacketTooBigException bij het uitvoeren van een sonaranalyse

  2. SCHEMA() Functie in MySQL

  3. Controleer of een Postgres JSON-array een string bevat

  4. Wat is de minimale klantvoetafdruk die nodig is om C# te verbinden met een Oracle-database?