sql >> Databáze >  >> RDS >> Mysql

Proč COUNT() zobrazuje pouze jeden řádek tabulky?

COUNT() je agregační funkce, která se obvykle kombinuje s GROUP BY doložka.

curdate() je funkce data, která zobrazuje aktuální datum.

Pouze MySQL (pokud vím) umožňuje tuto syntaxi bez použití GROUP BY doložka. Protože jste jej neposkytli, COUNT(*) bude počítat celkový počet řádků v tabulce a owner sloupec bude vybrán náhodně/výchozí nastavení optimalizátoru/podle indexů.

Toto by měl být váš dotaz:

select owner, count(*) 
from pet
group by owner;

Což říká optimalizátoru, aby spočítal celkový počet řádků pro každý vlastník.

Pokud není zmíněna žádná skupina podle klauzule - agregační funkce se použijí na celá data tabulky.

UPRAVIT: Počet, který bude použit na každý řádek, nelze normálně provést pomocí COUNT() a obvykle se používá s analytickou funkcí -> COUNT() OVER(PARTITION...) který bohužel v MySQL neexistuje. Další možností je vytvořit JOIN/CORRELATED QUERY pro tento další sloupec.

Další úprava: Pokud chcete celkový počet u každého vlastníka, můžete použít dílčí dotaz:

SELECT owner,
       (SELECT COUNT(*) FROM pet) as cnt
FROM pet


  1. Příkaz SQL IN - ponechat duplikáty při vracení výsledků

  2. Jak najít další bezplatné jedinečné 4místné číslo

  3. mysql concat řetězec s výsledkem

  4. Vypište všechny tabulky obsahující daný název sloupce