简体   繁体   English

如何获取与分组集中到不同列中的最小值和最大值对应的项目的名称

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM