Diferența dintre count(*) și count(1) în mysql? (Administrarea bazelor de date, Mysql)

Satish Pandey a intrebat.
a intrebat.

În MySql putem număra numărul total de înregistrări folosind count(1) sau count(*).

Există vreo diferență tehnică între ele?

1 răspunsuri
StuartLC

Ele sunt la fel. Acest lucru a fost întrebat de multe ori în Stackoverflow și aici

count(*), count(0), count(1), count(-1)

toate returnează numărul.

De fapt, în SQL Server, expresia nici măcar nu este evaluată.

Editează De fapt, în SQL Server, a COUNT(ALL ...) expresie CONSTANT nu pare să fie evaluată deloc, însă o expresie COUNT(DISTINCT ...) este*.

De ex.

select count(ALL 1/0) from xyz; -- Succeeds

dar

select count(DISTINCT 1/0) from xyz;  -- Divide by Zero

și cel puțin o excepție este NULL

select count(1) from xyz; -- Operand data type void type is invalid for count operator.

FWR în MySQL count(1/0) returnează 0 indiferent de numărul de rânduri.

Comentarii

  • În postgresql select count(1/0) from xyz produce o eroare „ERROR: division by zero”. – thisfeller
  • Da, este interesant de văzut cum gestionează diferitele RDBMS o expresie invalidă. –  > Por StuartLC.
  • Corect … select count(1/0) returnează întotdeauna 0. – Satish Pandey
  • COUNT(xxx) returnează numărul de rânduri în care xxx este prezent, puteți utiliza COUNT(column) pentru a număra numărul de coloane non-NULL („SELECT count(xxx) FROM table” este conceptual același cu „numărătoarea rândurilor din ‘SELECT xxx FROM table'”). Din acest punct de vedere, COUNT(*) fiind același lucru cu COUNT(1) are logica sa, precum și 0 returnat pentru COUNT(1/0) în unele sisteme (nicio înregistrare nu conține 1/0). – herby
  • Vă rugăm să rețineți că în SQL Server (cel puțin), atunci când folosiți SELECT COUNT(DISTINCT a) FROM T, expresia este evaluată și nu este ignorată așa cum am menționat. –  > Por NoChance.

Tags: