Mysql
 sql >> база данни >  >> RDS >> Mysql

Защо COUNT() показва само един ред от таблица?

COUNT() е функция за агрегиране, която обикновено се комбинира с GROUP BY клауза.

curdate() е функция за дата, която извежда текущата дата.

Само MySQL (доколкото знам) позволява този синтаксис без да се използва GROUP BY клауза. Тъй като не сте го предоставили, COUNT(*) ще отчита общото количество редове в таблицата и owner колоната ще бъде избрана произволно/по подразбиране на оптимизатора/по индекси.

Това трябва да е вашата заявка :

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

Което казва на оптимизатора да брои общия брой редове завсеки собственик.

Когато не се споменава група по клауза - функциите за агрегиране се прилагат към всички данни на таблицата.

РЕДАКТИРАНЕ: Брой, който ще бъде приложен към всеки ред, не може да се направи нормално с COUNT() и обикновено се използва с аналитична функция -> COUNT() OVER(PARTITION...) който за съжаление не съществува в MySQL. Другата ви опция е да направите JOIN/CORRELATED QUERY за тази допълнителна колона.

Друга редакция: Ако искате да изчислите общия брой до всеки собственик, можете да използвате подзаявка:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извикване на недефинирана функция mysql_query()

  2. Play 2.4 - Slick 3.0.0 - DELETE не работи

  3. Сесията работи правилно в Localhost, но не и в CPANEL

  4. Microsoft SQL Server, еквивалент на MySQL REGEXP

  5. Homebrew MySQL 8.0.18 на macOS 10.15 Catalina няма да работи като услуга