[英]How to get Name of an item corresponding to Min and Max value in a grouped set into different columns
Table 1 : ORDERS (ORDER_ID, CUSTOMER_ID, ITEM_ID, QUANTITY)表 1 :订单(ORDER_ID、CUSTOMER_ID、ITEM_ID、QUANTITY)
Table 2 : CUSTOMERS (CUSTOMER_ID, CUSTOMER_NAME, ZIPCODE)表 2 :客户(CUSTOMER_ID、CUSTOMER_NAME、ZIPCODE)
Table 3 : ITEMS (ITEM_ID, ITEM_NAME)表 3 :项目(ITEM_ID,ITEM_NAME)
Required Output : OUTPUT (ZIPCODE, MAX_ORDERED_ITEM_NAME, MIN_ORDERED_ITEM_NAME所需输出:输出(邮政编码、MAX_ORDERED_ITEM_NAME、MIN_ORDERED_ITEM_NAME
I've tried various approaches to get the output, but haven't been able to get to the end result我尝试了各种方法来获得输出,但一直无法得到最终结果
Current query:当前查询:
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;
You can use analytical function ROW_NUMBER
with the group by
as following:您可以
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;
Cheers!!干杯!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.