如何从两个 MySQL 数据库列计算一个值以用于 WHERE 子句

How to compute a value from two MySQL database columns for use in WHERE clause

我有一个查询以...

开头
SELECT session_id, time, quantity, teacher, sum(time+(quantity*60*60*60)) AS end FROM my_table WHERE end > 1582214400 

我收到 PDO 异常...

column not found: 1054 Unknown column 'end' in 'where clause'

为什么 PDO/MySQL 给我这个错误?计算 end 以便我可以在 WHERE 子句中使用它的正确语法是什么?

您不能在 where 子句中使用来自 select 的别名。使用 having 代替如下:

SELECT session_id, time, quantity, teacher, sum(time+(quantity*60*60*60)) AS end FROM my_table having end > 1582214400 

Jens 说得对,您不能像以前那样使用别名 end。您还可以通过其他几种方式编写查询。由于评论太长,我添加了一个答案。

这是编写查询的另一种方法。请注意,我明确使用了 group by 子句。

SELECT
  session_id,
  time,
  quantity,
  teacher,
  sum(time+(quantity*60*60*60)) AS end
FROM my_table
GROUP BY
  session_id,
  time,
  quantity,
  teacher 
HAVING sum(time+(quantity*60*60*60)) > 1582214400 

或者您可以使用子查询,这可能效率低下。

SELECT * FROM (

  SELECT
    session_id,
    time,
    quantity,
    teacher,
    sum(time+(quantity*60*60*60)) AS end
  FROM my_table
  GROUP BY
    session_id,
    time,
    quantity,
    teacher 

) main
WHERE end > 1582214400