【发布时间】:2015-03-12 01:25:29
【问题描述】:
我在使用基本 SQL 查询时遇到问题。将 MIN 函数与连接一起使用时会发生这种情况。
我要做的是选择订单最小的客户,同时显示那里的详细信息。
出现的错误是来自以下函数的无效运算符:
SELECT CUSTOMER.FNAME, CUST_ORDER.SALE_PRICE FROM (CUSTOMER INNER JOIN CUST_ORDER ON CUST_ORDER.CUST_NBR=CUSTOMER.CUST_NBR)HAVING MIN(CUST_ORDER.SALE_PRICE);
+----------+-------+-------+
| CUST_NBR | FNAME | LNAME |
+----------+-------+-------+
+-----------+----------+------------+
| ORDER_NUM | CUST_NUM | SALE_PRICE |
+-----------+----------+------------+
我要找的结果是:
+-------+------------+
| FNAME | SALE_PRICE |
+-------+------------+
这应该只返回一个用户的名字和销售价格。
我也试过了
HAVING SALE_PRICE = MIN(SALE_PRICE)
但这会错误地抛出一个组。我也尝试过使用 group by 子句:
SELECT CUSTOMER.FNAME, CUST_ORDER.SALE_PRICE FROM (CUSTOMER INNER JOIN CUST_ORDER ON CUST_ORDER.CUST_NBR=CUSTOMER.CUST_NBR) GROUP BY FNAME HAVING MIN(CUST_ORDER.SALE_PRICE);
这也给出了无效的操作错误。
谁能指出我做错了什么?
注意
如果我从原始查询中取出HAVING min(sale_price),它将返回所有用户和所有订单的列表。我以为拥有 min 只会给我留下一个最小的订单,为什么会出错?
更新
我已经包含了 cmets 建议的解决方案,但这会返回每个用户的最小订单,我希望所有用户的最小订单应该只返回一个客户。
【问题讨论】:
-
别忘了 GROUP BY!
-
错误是由两件事引起的,第一
min(sale_price)不是条件,应该是sale_price = min(sale_price),第二你需要一个group by。