未能在 SQL 加入时显示加入密钥

Failing to display joining key on SQL Joins

我有标准的 2 个表格 - 我想显示每个组中最畅销的产品(按销售额)

Product_Info_Table -> 
Product_Id, Product_Group, Product_Name
P1  BOOK    3 Musketeers
P10 SHOES   NIKE Fly
P11 SHOES   NIKE Thunder
P12 SHOES   ADIDAS 10
P13 SHOES   ADIDAS 09
P14 BOOK    Harry Potter 1
P15 BOOK    Harry Potter 2
P2  BOOK    HARRY POTTER 7
P3  ELECTRONICS NIKON 5600i
P4  ELECTRONICS CANNON 4d
P5  ELECTRONICS CANNON 5d
P6  VIDEO DVD   LOR 1
P7  VIDEO DVD   LOR 2
P8  VIDEO DVD   HP 1
P9  VIDEO DVD   HP 2

和Product_Sales_Table

Product_ID SALES_AMT
P1  10
P10 8
P11 45
P2  5
P3  5
P4  25
P5  15
P6  35
P7  5
P8  100
P9  30

我做了以下事情:

SELECT product_info_table.PRODUCT_GROUP, 
product_info_table.PRODUCT_ID,
MAX(IFNULL(sales_fact_table.SALES_AMT,0))

FROM product_info_table
INNER JOIN product_sales_table 
ON product_sales_table.PRODUCT_ID = product_info_table.PRODUCT_ID

GROUP BY product_info_table.PRODUCT_GROUP

结果:

Product_Group Id    Max_Sales
BOOK          P1    10
SHOES         P10   45
ELECTRONICS   P3    25
VIDEO DVD     P6    100

错误:奇怪的是,此结果正确识别了每个类别中最畅销的产品,但是 Product_Id 未正确显示,默认情况下每个类别中第一个 product_id 被选中。

我做错了什么才能显示正确的 product_id。

Desired_Result

Product_Group Id    Max_Sales
BOOK          P1    10
SHOES         P11   45
ELECTRONICS   P4    25
VIDEO DVD     P8    100

使用 window 函数而不是聚合:

SELECT p.*
FROM (SELECT pit.PRODUCT_GROUP, pit.PRODUCT_ID, pst.SALES_AMT,
             ROW_NUMBER() OVER (PARTITION BY pit.PRODUCT_GROUP ORDER BY pst.SALES_AMT DESC) as seqnum
      FROM product_info_table pit JOIN
           product_sales_table pst
           ON pst.PRODUCT_ID = pit.PRODUCT_ID
     ) p
WHERE seqnum = 1;