这是我的表“卖家”
+------------+---------+----------+
| Seller_ID | Product | Units |
+------------+---------+----------+
| Seller_123 | A1 | 10 |
| Seller_123 | B2 | 20 |
| Seller_123 | C3 | 70 |
+------------+---------+----------+
从这里你可以看到这个“Seller_123”主要产品组是C3,因为他的单位主要集中在C3和70个单位。这是我想要实现的目标
+------------+-------------+
| Seller_ID | Main_Product|
+------------+-------------+
| Seller_123 | C3 |
+------------+-------------+
这是我当前的SQL查询
WITH TEMP
AS (
SELECT Seller_ID
,SUM(CASE
WHEN Product = 'A1'
THEN Units
END) AS A1_Units
,SUM(CASE
WHEN Product = 'B2'
THEN Units
END) AS B2_Units
,SUM(CASE
WHEN Product = 'C3'
THEN Units
END) AS C3_Units
FROM sellers
GROUP BY Seller_ID
)
SELECT Seller_ID
,CASE
WHEN A1_Units > B2_Units
AND A1_Units > C3_Units
THEN A1
WHEN B2_Units > A1_Units
AND B2_Units > C3_Units
THEN B2
WHEN C3_Units > A1_Units
AND C3_Units > B2_Units
THEN C3
END AS Main_Product
FROM TEMP
这样做的更好方法是什么?如果我有100件产品怎么办?在那种情况下我不能做什么?
感谢您的帮助。
答案 0 :(得分:2)
试试这个
SELECT S1.SELLER_ID, S1.PRODUCT AS MAIN_PRODUCT
FROM SELLER S1,
(SELECT SELLER_ID, MAX(UNITS) AS MAX_UNIT FROM SELLER
GROUP BY SELLER_ID) S2
WHERE S1.SELLER_ID = S2.SELLER_ID
AND S1.UNITS=S2.MAX_UNIT
表格如下所示。
select * from SELLER;
Seller_ID Product Units
Seller_123 A1 10
Seller_123 B2 20
Seller_123 C3 70
Seller_456 D1 10
Seller_456 E2 20
运行给定的select语句后,您将获得如下所示的数据
SELECT S1.SELLER_ID, S1.PRODUCT AS MAIN_PRODUCT
FROM SELLER S1,
(SELECT SELLER_ID, MAX(UNITS) AS MAX_UNIT FROM SELLER
GROUP BY SELLER_ID) S2
WHERE S1.SELLER_ID = S2.SELLER_ID
AND S1.UNITS=S2.MAX_UNIT
SELLER_ID MAIN_PRODUCT
Seller_456 E2
Seller_123 C3
答案 1 :(得分:2)
首先计算每种产品的所有销售额,然后查看哪一种是最大值。然后加入两个。
请注意,如果两个产品都是平局,则两者都会出现。
你没有说是想要所有Seller_ID
的结果,还是只想要一个。{
这适用于所有卖家。
WITH Sales as (
SELECT
Seller_ID, Product, SUM(Units) AS Total
FROM
sellers
GROUP BY
Seller_ID, Product
),
Focus as (
SELECT Seller_ID, MAX(Total) Total
FROM Sales
GROUP BY Seller_ID
)
SELECT *
FROM Sales
Inner Join Focus
ON Sales.Total = Focus.Total
and Sales.Seller_ID = Focus.Seller_ID