我用如下的查询来计数记录
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需要遍历表,如果有长表和大量查询,这将是一个大问题。
我想知道是否有办法在一个查询中进行所有计数。在这种情况下,当mysql遍历每一行时,它将处理所有计数,不需要一遍又一遍地扫描整个表。
发布于 2012-08-25 03:34:58
类似于Aaron的解决方案,语法更短:
SELECT
SUM(col1 LIKE '%something%') AS count1,
SUM(col1 LIKE '%another%') AS count2,
SUM(col1 LIKE '%word%') AS count3
FROM `table1`
类似的表达式构成布尔结果。TRUE
是1,FALSE
是0,所以CASE
在这里是多余的。
发布于 2012-08-24 11:43:00
如果我把你的需求做对了,这也许会有效果:
SELECT SUM(CASE
WHEN col1 LIKE '%something' THEN 1
WHEN col1 LIKE '%another%' THEN 1
END) AS result
FROM table1;
https://dba.stackexchange.com/questions/23068
复制相似问题