选择最小值,得到无效的关系运算符

Selecting minimum value, getting Invalid relational operator

我在使用基本 SQL 查询时遇到问题。将 MIN 函数与联接一起使用时会发生这种情况。

我想做的是 select 订单最少的客户,同时也显示那里的详细信息。

出现的错误是来自以下函数的无效运算符:

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 |
+-------+------------+

应该只有 return 一个用户以他们的名字作为销售价格。

我也试过了

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),它 return 就是所有用户和所有订单的列表。我假设有 min 只会给我留下一个最小的订单为什么会出错?

更新

我已经包含了评论建议的解决方案,但这 return 是每个用户的最小订单,我想要所有用户的最小订单,应该只有 return 一个客户。

您可以这样做:

SELECT CUSTOMER.FNAME, CUST_ORDER.SALE_PRICE
  FROM (SELECT CUSTOMER.FNAME,
               CUST_ORDER.SALE_PRICE,
               MIN (CUST_ORDER.SALE_PRICE) OVER () MIN_PRICE
          FROM (CUSTOMER
                INNER JOIN CUST_ORDER
                   ON CUST_ORDER.CUST_NBR = CUSTOMER.CUST_NBR))
 WHERE CUST_ORDER.SALE_PRICE = MIN_PRICE

你也可以通过子查询得到最小值然后再求:

 SELECT CUSTOMER.FNAME, CUST_ORDER.SALE_PRICE
    FROM (CUSTOMER
          INNER JOIN CUST_ORDER ON CUST_ORDER.CUST_NBR = CUSTOMER.CUST_NBR)
    where CUST_ORDER.SALE_PRICE = (SELECT MIN(SALE_PRICE) FROM CUST_ORDER)

您可以使用解析 (window) 函数而不是聚合来执行此操作:

SELECT fname, sale_price FROM (
    SELECT c.fname, co.sale_price, RANK() OVER ( ORDER BY co.sale_price ) rn
      FROM customer c INNER JOIN cust_order co
        ON c.cust_nbr = co.cust_nbr
) WHERE rn = 1;

这将return所有位客户以最低订单销售价;如果您只想要一位顾客,请使用 ROW_NUMBER() 而不是 RANK()