sql >> Databáze >  >> RDS >> PostgreSQL

seskupit podle potřeby v příkazu SQL count(*)?

Tato chyba dává dokonalý smysl. COUNT je „agregační“ funkce. Musíte mu tedy sdělit, podle kterého pole se má agregovat, což se provádí pomocí GROUP BY klauzule.

Ten, který ve vašem případě pravděpodobně dává největší smysl, by byl:

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

Pokud pouze použijte COUNT(*) klauzule, žádáte o vrácení celého počtu řádků namísto agregace podle jiné podmínky. Váš dotaz, zda GROUP BY je v takovém případě implicitní, lze odpovědět:"sort of":Pokud nic nespecifikujete, je to trochu jako ptát se:"group by nothing", což znamená, že dostanete jeden obrovský agregát, což je celá tabulka.

Například provedení:

SELECT COUNT(*) FROM table;

zobrazí počet řádků v této tabulce, zatímco:

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

vám ukáže počet řádků na hodnotu col_a . Něco jako:

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

Měli byste také vzít v úvahu, že * znamená počítat vše . Včetně NULL s! Pokud chcete počítat konkrétní podmínku, měli byste použít COUNT(expression) ! Viz dokumenty o agregačních funkcích pro více podrobností o tomto tématu.



  1. Co je rychlejší SELECT * nebo SELECT `pole`, když vyžaduje pouze `pole`

  2. Oracle volitelný vztah

  3. Velké úložiště .patch_storage

  4. Zpracování nulového data MySQL pomocí EF Core