PostgreSQL查询单列最小最大值,指定列名并仅返回2行
问题分析
你当前的SQL用GROUP BY Order_ID会按每个订单ID单独分组,而每个订单ID对应的order_tot只有一个值,所以每条订单都会返回一行,自然得到2000条结果。
解决方案
如果要返回2行,分别展示订单总额最小和最大的记录,可使用UNION ALL结合子查询实现:
-- 获取订单总额最小的记录 SELECT ord_id AS Order_ID, order_tot AS Minimum_Order, NULL AS Maximum_Order FROM orders WHERE order_tot = (SELECT MIN(order_tot) FROM orders) UNION ALL -- 获取订单总额最大的记录 SELECT ord_id AS Order_ID, NULL AS Minimum_Order, order_tot AS Maximum_Order FROM orders WHERE order_tot = (SELECT MAX(order_tot) FROM orders);
如果存在多个订单总额同为最小或最大的情况,上述SQL会返回对应数量的行。若要只各返回一行(比如取第一个遇到的ID),可以在子查询里加上LIMIT 1:
SELECT ord_id AS Order_ID, order_tot AS Minimum_Order, NULL AS Maximum_Order FROM orders WHERE order_tot = (SELECT MIN(order_tot) FROM orders) LIMIT 1 UNION ALL SELECT ord_id AS Order_ID, NULL AS Minimum_Order, order_tot AS Maximum_Order FROM orders WHERE order_tot = (SELECT MAX(order_tot) FROM orders) LIMIT 1;
内容的提问来源于stack exchange,提问作者stella1897
相关产品推荐
相关产品推荐

