![](/img/trans.png)
[英]How to add corresponding date to grouped max/min-value in postgres?
[英]How to get Name of an item corresponding to Min and Max value in a grouped set into different columns
表 1 :订单(ORDER_ID、CUSTOMER_ID、ITEM_ID、QUANTITY)
表 2 :客户(CUSTOMER_ID、CUSTOMER_NAME、ZIPCODE)
表 3 :项目(ITEM_ID,ITEM_NAME)
所需输出:输出(邮政编码、MAX_ORDERED_ITEM_NAME、MIN_ORDERED_ITEM_NAME
我尝试了各种方法来获得输出,但一直无法得到最终结果
当前查询:
SELECT ZIPCODE, ITEM_NAME, SUM(QUANTITY) AS SALES
FROM ORDERS
JOIN CUSTOMERS ON ORDERS.CUSTOMER_ID = CUSTOMERS.CUSTOMER_ID
JOIN ITEMS ORDERS.ITEM_ID = ITEMS.ITEM_ID
GROUP BY ZIPCODE, ITEM_NAME
ORDER BY SALES DESC;
您可以group by
以下方式对group by
使用分析函数ROW_NUMBER
:
SELECT O.ZIPCODE, MAX(CASE WHEN MAXRN = 1 THEN ITEM_NAME END) AS MAX_ORDERED_ITEM_NAME, MAX(CASE WHEN MINRN = 1 THEN ITEM_NAME END) AS MIN_ORDERED_ITEM_NAME FROM (SELECT O.ZIPCODE, I.ITEM_ID, I.ITEM_NAME, ROW_NUMBER() OVER (PARTITION BY I.ITEM_ID ORDER BY SUM(QUANTITY) ) AS MINRN, ROW_NUMBER() OVER (PARTITION BY I.ITEM_ID ORDER BY SUM(QUANTITY) DESC NULLS LAST) AS MAXRN FROM ORDERS O JOIN ITEMS I ON I.ITEM_ID = O.ITEM_ID JOIN CUSTOMERS C ON C.CUSTOMER_ID = O.CUSTOMER_ID GROUP BY O.ZIPCODE, I.ITEM_ID, I.ITEM_NAME) WHERE 1 IN (MINRN, MAXRN) GROUP BY O.ZIPCODE;
干杯!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.