sql >> Databasteknik >  >> RDS >> Mysql

MySQL grupp efter och hoppa över gruppering på nollvärden

Om vi ​​har en unik kolumn (eller uppsättning kolumner) i tabellen kan vi lägga till ytterligare ett uttryck till GROUP BY .

Uttrycket måste returnera ett unikt värde för varje rad när collection_id är inget. Annars returnerar den en konstant.

Förutsatt att vi har ett unikt id kolumn i tabellen, då kan vi göra något så här:

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

Det andra uttrycket i GROUP BY returnerar ett konstant värde 0 när collection_id är inte null. Men det returnerar ett unikt värde för varje rad när collection_id är null.

Observera att id här är bara en referens till en kolumn som är definierad som unik i tabellen. PRIMÄRNYCKELN är en bra kandidat. Om vi ​​inte har ett unikt index på en enda kolumn kan vi upprepa samma typ av uttryck för varje kolumn i vår unika begränsning, eller för vilken uppsättning uttryck som helst som garanterat är unika på varje rad.

... 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 använda ett uttryck som genererar ett unikt värde:

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


  1. Anropa en medlemsfunktion find() på ett icke-objekt när data infogas med PHP mySQL simpleHTMLDOM

  2. SELECT * FROM tbl WHERE clm LIKE CONCAT('%',<other sql-query LIMIT 1>,'%') - HUR?

  3. Ignorera dubblettposter och begå framgångsrika på DbContext.SaveChanges() i EF Core

  4. Följ med mig tisdagen den 9 april för de senaste Microsoft Access-nyheterna