在 sql 查询中出现错误

Getting errors in an sql query

问题 -> Select 所有大于 10 月 4 日平均值的订单。

Table 架构:

mysql> desc orders;
+-------+-------+------+-----+---------+-------+
| Field | Type  | Null | Key | Default | Extra |
+-------+-------+------+-----+---------+-------+
| ONUM  | int   | NO   | PRI | NULL    |       |
| AMT   | float | NO   |     | NULL    |       |
| ODATE | date  | NO   |     | NULL    |       |
| CNUM  | int   | YES  | MUL | NULL    |       |
| SNUM  | int   | YES  | MUL | NULL    |       |
+-------+-------+------+-----+---------+-------+

我为此尝试了很多查询(大约10次),但仍然无法通过。 我尝试过的一些查询:

select outer.onum, outer.amt from orders outer where outer.amt>any(select avg(o.amt) from orders o group by o.odate having o.odate='1996-10-04') and outer.odate<>'1996-10-04';
select outer.onum, outer.amt from orders as outer where outer.amt>any(select avg(o.amt) as 04_avg from orders o group by o.odate having o.odate='1996-10-04') and outer.odate<>'1996-10-04';

仍然没有成功。有人可以帮帮我吗?另外,任何人都可以解释与子查询相关的聚合函数的用法以及相关子查询和嵌套查询的正确用法。互联网没有太大帮助。 谢谢。

您可以通过以下查询获得 1996-10-04 的平均值:

SELECT AVG(AMT) 
FROM orders
WHERE ODATE = '1996-10-04'

您可以在 WHERE 子句中使用上述查询,如下所示:

SELECT *
FROM orders
WHERE AMT > (
  SELECT AVG(AMT) 
  FROM orders
  WHERE ODATE = '1996-10-04'
) 

如果要过滤掉 1996-10-04 行,您可以添加:

AND ODATE <> '1996-10-04'

这也行。更改了外部的别名table,并使用了“外部”以外的词。

select outer4.onum, outer4.amt from orders as outer4 where outer4.amt >any(select avg(o.amt) from orders o group by o.odate having o.odate='1996-10-04') and outer4.odate<>'1996-10-04';

select onum, amt from orders where amt >(select avg(o.amt) from orders o group by o.odate having o.odate='1996-10-04') and odate<>'1996-10-04';