Autor Zpráva
ahoj
Profil *
Inspirován jedním zdejším vláknem, zamyslel jsem se, jak spočítat řádky, splňující podmínku.
Zkusil jsem

SELECT COUNT(ID>100) FROM table

a čekal jsem, že to spočte řádky s ID>100. Vrací mi to ale počet všech řádků v tabulce. Proč?
(neptám se, jak počítat řádky podle kritérií, ptám se, proč COUNT(ID>100) vrací počet všech řádků)
Someone
Profil
---
Přehlédl jsem

ahoj:
neptám se, jak počítat řádky
Tori
Profil
ahoj:
Cituji manuál: „COUNT(expr) - Returns a count of the number of non-NULL values of expr in the rows retrieved by a SELECT statement.“. Tzn. to co chcete, byste musel zapsat takto: SELECT COUNT(IF(id > 100, id, NULL)) FROM table
ahoj
Profil *
Tori:
Aha. Takže k nezapočítání řádku nestačí false, ale musí být null. Díky.
Kajman
Profil
Šlo by i
select sum(id>100)
ale myslím, že většinou dopadne rychleji
(select count(*) ... where id>100)
Tori
Profil
Jinak měla bych doplňující dotaz na zkušenější: Je nějaký rozdíl (uvnitř MySQL) mezi těmito dvěma zápisy, anebo to je jen syntaktická záležitost?
1. SELECT COUNT(IF(id > 100, id, NULL)) FROM table
2. SELECT COUNT(*) FROM table WHERE id > 100
Zkoušela jsem teď explainy, a zdá se, že podmínka uvnitř count se musí provést pro jeden každý řádek tabulky (byť přitom využije index). Stejná podmínka ve WHERE asi neprochází všechny řádky, ale vyřeší se jen přes index. (jestli teda správně interpretuju výsledky)
ahoj
Profil *
Kajman:
ale myslím, že většinou dopadne rychleji

Mně šlo o případ, kdy těch countů je víc a nejsou třeba ani samy. Konkrétně mě to napadlo při čtení tohoto.
Kajman
Profil
Tori:
Myslím, že jsi to popsala správně. V prvním případě se pro každý řádek musí vyřešit, zda dělat count nad číslem nebo null hodnotou. V druhém se jen podle indexu zjistí počet id větších než 100.

ahoj:
Když bude countů víc, o to větší může být rozdíl v rychlosti obou variant.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: