Mysql 如何在WHERE子句中使用别名列day?

Mysql 如何在WHERE子句中使用别名列day?,mysql,sql,Mysql,Sql,我对这个问题有一个疑问: SELECT DAYOFYEAR(t.ts_start) AS 'day', YEAR(t.ts_start) AS year, t.o AS value FROM Cryptoforecast_ETH_BTC_1h AS t 当我运行它时,它会显示结果。现在我想过滤一天中添加的WHERE语句,如下所示 SELECT DAYOFYEAR(t.ts_start) AS 'day', YEAR(t.ts_start) AS year, t.o AS value FR

我对这个问题有一个疑问:

  SELECT DAYOFYEAR(t.ts_start) AS 'day', YEAR(t.ts_start) AS year, t.o AS value FROM Cryptoforecast_ETH_BTC_1h AS t 
当我运行它时,它会显示结果。现在我想过滤一天中添加的
WHERE
语句,如下所示

SELECT DAYOFYEAR(t.ts_start) AS 'day', YEAR(t.ts_start) AS year, t.o AS value FROM Cryptoforecast_ETH_BTC_1h AS t WHERE 'day'=157
但这并没有带来任何结果和警告:

Truncated incorrect DOUBLE value: 'day'

问题是什么?

您不能在
WHERE
子句中使用别名列。所以,实际上并不是比较列,而是比较字符串值和int

WHERE 'day'=157
相反,你可以使用

WHERE DAYOFYEAR(t.ts_start) = 157

旁注:您不需要对列别名使用单引号。

只需重复调用
WHERE
子句中的
DAYOFYEAR

SELECT
    DAYOFYEAR(t.ts_start) AS day,
    YEAR(t.ts_start) AS year,
    o AS value
FROM Cryptoforecast_ETH_BTC_1h
WHERE DAYOFYEAR(t.ts_start) = 157;
SELECT
    DAYOFYEAR(t.ts_start) AS day,
    YEAR(t.ts_start) AS year,
    o AS value
FROM Cryptoforecast_ETH_BTC_1h
HAVING day = 157;
或者,如果您想使用
day
别名,可以使用重载的
HAVING
子句:

SELECT
    DAYOFYEAR(t.ts_start) AS day,
    YEAR(t.ts_start) AS year,
    o AS value
FROM Cryptoforecast_ETH_BTC_1h
WHERE DAYOFYEAR(t.ts_start) = 157;
SELECT
    DAYOFYEAR(t.ts_start) AS day,
    YEAR(t.ts_start) AS year,
    o AS value
FROM Cryptoforecast_ETH_BTC_1h
HAVING day = 157;

尝试此操作,
选择DAYOFYEAR(t.ts_start)作为day,选择YEAR(t.ts_start)作为YEAR,选择t.o作为Cryptoforecast的值,选择t.o作为t HAVING day=157