显示产品名称和产品销售量最大的城市

时间:2017-10-15 19:37:35

标签: sql sql-server

我正在尝试查询以显示产品销售量最高的产品名称和城市。这是我正在使用的代码:

SELECT DISTINCT
  (s.city),
  MAX(t.quantity),
  p.Name
FROM [DS715-Cameron-Erwin].dbo.Tb_Transactions AS t,
     [DS715-Cameron-Erwin].dbo.Tb_Product AS p,
     [DS715-Cameron-Erwin].dbo.Tb_Supplier AS s
WHERE p.prod_id = t.prod_id
AND s.Supp_ID = t.Supp_ID
GROUP BY t.Prod_ID,
         p.name,
         s.city
ORDER BY p.name, s.city

这给了我每个城市每件产品的最高销量。

Sample Data

从屏幕截图中可以看到每种产品的多条记录(Airplane,Auto,Boat ......)。我正在尝试为每个购买量最多的产品获取单个记录。 因此,最高记录只会显示为飞机,因为大多数订单来自那里。

2 个答案:

答案 0 :(得分:0)

为此,我会使用CTE(我也会使用显式的INNER JOIN语法):

;With CTE
As
(
    Select
        s.city
        , t.quantity
        , p.Name  
        , Row_Number Over (Partition By P.Name, s.city Order By t.Quantity Desc) as RN
    From [DS715-Cameron-Erwin].dbo.Tb_Transactions as t 
        Inner Join [DS715-Cameron-Erwin].dbo.Tb_Product as p
            On p.prod_id = t.prod_id
        Inner Join [DS715-Cameron-Erwin].dbo.Tb_Supplier as s
            On s.Supp_ID = t.Supp_ID
)
Select
    city
    , quantity
    , Name
From CTE
Where RN = 1

答案 1 :(得分:0)

您希望使用ROW_NUMBER() OVER功能按数量排序,然后选择数量最多的产品。

SELECT
  city,
  quantity,
  name
FROM  
(

    SELECT  S.city,
            T.quantity,
            P.name,
            ROW_NUMBER() OVER
              ( PARTITION BY
                P.name
                ORDER BY t.Quantity DESC
              ) as RowNum
    FROM
            Tb_Transactions T
                INNER JOIN
            Tb_Product P
                ON
              P.prod_id = T.prod_id
                INNER JOIN
            Tb_Supplier S
                ON
              S.supp_id = T.supp_id
 ) a
 WHERE
     RowNum = 1

http://sqlfiddle.com/#!6/628458/5

enter image description here