首先,我不是 MySQL 查询方面的专家,而且我似乎找不到解决问题的方法。
例子:
SELECT SUM(IF(table1.col1<4,1,0)) AS score WHERE score>0 GROUP BY table1.col2
上面会给出一个错误,因为表 1 中不存在列 score。
这是我的解决方法:
SELECT SUM(IF(table1.col1<4,1,0)) AS score GROUP BY table1.col2
然后检查 PHP 中的每一行
if($row['score']>0){...
存在性能问题,因为我正在遍历我知道不需要的行,理想情况下我需要忽略查询中的那些行。
我的理解是 WHERE 子句是针对表的每一行而不是分组行触发的。
有办法吗?
最佳答案
支持列别名,因此您可以这样做:
SELECT SUM(IF(table1.col1<4,1,0)) AS score
GROUP BY table1.col2
HAVING score > 0
您可以简化它,因为您正在尝试计算 col1 < 4 的行数:
SELECT COUNT(table1.col1) AS score
WHERE table1.col1 < 4
GROUP BY table1.col2
HAVING score > 0
关于php - 可以在 WHERE 子句中评估列别名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1606240/