sql >> Databasteknik >  >> RDS >> PostgreSQL

gruppera efter behövs i count(*) SQL-sats?

Detta fel är helt logiskt. COUNT är en "aggregerad" funktion. Så du måste tala om för det vilket fält den ska aggregera efter, vilket görs med GROUP BY klausul.

Det som förmodligen är mest vettigt i ditt fall skulle vara:

SELECT column_a, COUNT(*) FROM my_schema.my_table GROUP BY column_a;

Om du bara använd COUNT(*) klausul ber du att returnera hela antalet rader, istället för att aggregera med ett annat villkor. Ditt uppdrag om GROUP BY är underförstått i så fall, skulle kunna besvaras med:"typ av":Om du inte anger något är det lite som att fråga:"gruppera med ingenting", vilket betyder att du får ett enormt aggregat, vilket är hela tabellen.

Som ett exempel, exekvera:

SELECT COUNT(*) FROM table;

kommer att visa dig antalet rader i den tabellen, medan:

SELECT col_a, COUNT(*) FROM table GROUP BY col_a;

kommer att visa dig antalet rader per värdet för col_a . Något i stil med:

    col_a  | COUNT(*)
  ---------+----------------
    value1 | 100
    value2 | 10
    value3 | 123

Du bör också ta hänsyn till att * betyder att räkna allt . Inklusive NULL s! Om du vill räkna ett specifikt tillstånd bör du använda COUNT(expression) ! Se dokumenten om aggregerade funktioner för mer information om detta ämne.



  1. Kan inte fixa Fel:PL/SQL-sats ignoreras

  2. postgreSQL - psql \i :hur man kör skript i en given sökväg

  3. codeigniter aktiva poster förena med att använda?

  4. Kan du inte ansluta tomcat-behållare till mysql-databasbehållare i kubernetes?