我尝试计算自上次时间戳以来的平均值并拉出平均值大于3的所有记录。我当前的查询是:
SELECT AVG(BID)/BID AS Multiple
FROM cdsData
where Multiple > 3
and SqlUnixTime > 1492225582
group by ID_BB_RT;
我有一个表cdsData,并且unix时间是转换后的第15个月。最后,我希望在我显示的ID内计算该组。我不确定它为什么会失败,但是它说where子句中的字段Multiple是未知的。
答案 0 :(得分:2)
<强> 1) SQL从右到左向后评估。因此,在select子句之前解析和评估where子句。因此,尚未发生AVG(BID)/ BID到Multiple的别名。
你可以试试这个。
SELECT AVG(BID)/BID AS Multiple
FROM cdsData
WHERE SqlUnixTime > 1492225582
GROUP BY ID_BB_RT Having (AVG(BID)/BID)>3 ;
或
Select Multiple
From (SELECT AVG(BID)/BID AS Multiple
FROM cdsData
Where SqlUnixTime > 1492225582 group by ID_BB_R)X
Where multiple >3
<强> 2) 纠正上述错误后,您将再遇到一个错误:
Column 'BID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
要纠正此问题,您必须在group by子句中插入BID列。
答案 1 :(得分:2)
我尝试计算自上次时间戳以来的平均值,并拉出平均值大于3的所有记录。
我认为您的意图正确地说明如下,&#34;我正在尝试计算自上次时间戳以来的平均值,并选择平均值大于个别出价的3倍的所有行&#34;。
事实上,更好地重申您的目标,&#34; 我想选择自上一个时间戳以来的所有行,其中出价低于平均出价的1/3 &#34;
为此,步骤如下:
1)子查询查找自上次时间戳以来的平均出价除以3的行数。
2)外部查询选择自上一个时间戳以来的行,其中单个出价是&lt;子查询返回的值。
以下SQL语句执行此操作:
SELECT BID
FROM cdsData
WHERE SqlUnixTime > 1492225582
AND BID <
(
SELECT AVG(BID) / 3
FROM cdsData
WHERE SqlUnixTime > 1492225582
)
ORDER BY BID;