次のようなクエリでレコードを数えます
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%'
カウントごとに、mysqlはテーブル全体をウォークスルーする必要があり、長いテーブルと多数のクエリがある場合、これは大きな問題です。
1つのクエリですべてのカウントを行う方法はあるのでしょうか。この場合、mysqlが各行をウォークスルーすると、すべてのカウントが処理され、テーブル全体を何度もスキャンする必要がなくなります。
あなたが試すことができるそれらのそれぞれの数を取得するには
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`;
アーロンのsolutioと同様、短い構文:
SELECT
SUM(col1 LIKE '%something%') AS count1,
SUM(col1 LIKE '%another%') AS count2,
SUM(col1 LIKE '%Word%') AS count3
FROM `table1`
LIKE式はブール結果になります。 TRUE
は1、FALSE
はなので、CASE
はここでは冗長です。