Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Grupuj MySQL według i pomijaj grupowanie według wartości zerowych

Jeśli mamy unikalną kolumnę (lub zestaw kolumn) w tabeli, możemy dodać kolejne wyrażenie do GROUP BY .

Wyrażenie musi zwracać unikalną wartość dla każdego wiersza, gdy collection_id nie ma wartości. W przeciwnym razie zwraca stałą.

Zakładając, że mamy unikalny id kolumny w tabeli, wtedy możemy zrobić coś takiego:

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

Drugie wyrażenie w GROUP BY zwraca stałą wartość 0 kiedy collection_id nie jest pusta. Ale zwraca unikatową wartość dla każdego wiersza, gdy collection_id ma wartość null.

Zauważ, że id tutaj jest tylko odwołanie do kolumny, która jest zdefiniowana jako unikalna w tabeli. KLUCZ PODSTAWOWY jest dobrym kandydatem. Jeśli nie mamy unikalnego indeksu w pojedynczej kolumnie, możemy powtórzyć ten sam typ wyrażenia dla każdej kolumny w naszym ograniczeniu niepowtarzalności lub dla dowolnego zestawu wyrażeń, który gwarantuje unikalność w każdym wierszu.

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

Alternatywnie możemy użyć wyrażenia generującego unikalną wartość:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dane Swift httppost nie są wstawiane do bazy danych MySQL

  2. Relacja Doctrine2 ManyToMany nie zapisuje

  3. odwoływanie się do wielu kluczy obcych php mysql

  4. Schemat bazy danych Wufoo — jak byś go zaprojektował?

  5. Użycie Python3 mysqlclient-1.3.6 (aka PyMySQL)?