php - 可以在 WHERE 子句中评估列别名吗?

标签 php mysql

首先,我不是 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/

相关文章:

php - Monolog 没有写入正确的日志文件

php - 使用 glob 函数将文件扩展名设置为 css 类

mysql - 我可以将 MySQL 数据导入 Google Spanner 吗?

Mysql select from inner select with join

mysql - MySql中存储过程可以调用truncate veiw table并向 View 表输入数据吗

php - 使用计数而不是 mysql_num_rows?

php - 从 MySQL 链接表 SELECT 查询创建 PHP 多维关联数组

php - 在mysql查询中需要帮助

javascript - meteor Node :mysql custom query

c# - 对数据库的多次访问。如何防止不同的线程修改相同的数据?