it-swarm-eu.dev

Jak v jednom dotazu provést více počtů?

Počítám záznamy s dotazy jako

SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%something%'
SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%another%'
SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%Word%'

Pro každý počet musí mysql projít stůl, což je velký problém, pokud máte dlouhý stůl a četné dotazy.

Zajímalo by mě, jestli existuje způsob, jak počítat všechny v jednom dotazu. V tomto případě, když mysql projde každým řádkem, zpracuje všechny počty a není třeba znovu a znovu skenovat celou tabulku.

11
Googlebot

Chcete-li získat počet pro každého z vás, můžete vyzkoušet

SELECT
    COUNT(CASE WHEN `col1` LIKE '%something%' THEN 1 END) AS count1,
    COUNT(CASE WHEN `col1` LIKE '%another%' THEN 1 END) AS count2,
    COUNT(CASE WHEN `col1` LIKE '%Word%' THEN 1 END) AS count3
FROM `table1`; 
20
Aaron W.

Podobně jako Aaronovo solutio, kratší syntaxe:

SELECT
    SUM(col1 LIKE '%something%') AS count1,
    SUM(col1 LIKE '%another%') AS count2,
    SUM(col1 LIKE '%Word%') AS count3
FROM `table1`

Výraz LIKE vede k booleovskému výsledku. TRUE je 1, FALSE je , takže CASE je zde nadbytečné.

16
Shlomi Noach