Home [SQL] 求負責人的總業績(差集Except)
Post
Cancel

[SQL] 求負責人的總業績(差集Except)

IN可能存在的效能疑慮(效能差),可以使用EXISTS取代。

範例

取得包含於負責人清單,但不包含分店負責人清單中的負責人的總販賣業績(販賣單價*數量)。
(差集Except概念)

Exists + Execpt 差集

1
2
3
4
5
6
7
8
9
select  sum(B.販賣單價*A.數量) "總業績"
from [dbo].[販賣資料] A
join [dbo].[商品清單] B on B.商品ID = A.商品ID
where exists
(
    select [負責人ID] from [dbo].[負責人清單]
    except
    select [分店負責人ID] from [dbo].[分店負責人清單]
)

執行結果

1
2
總業績
4625000

In + Execpt 差集

1
2
3
4
5
6
7
8
9
10
select  sum(B.販賣單價 * A.數量) "總業績"
from [販賣資料] A
join [商品清單] B on B.商品ID = A.商品ID
where [負責人ID] in 
(
    select [負責人ID] from [dbo].[負責人清單]
    except
    select [分店負責人ID] from [dbo].[分店負責人清單]
) 

In + Not In

1
2
3
4
5
6
--取得包含於負責人清單,但不包含分店負責人清單中的負責人的總販賣業績(販賣單價*數量)
select sum(B.販賣單價 * A.數量) "總業績"
from [販賣資料] A
join [商品清單] B on B.商品ID = A.商品ID
where A.負責人ID in (select 負責人ID from [負責人清單]) --包含於負責人清單
and A.負責人ID not in (select [分店負責人ID] from [分店負責人清單]) --不包含分店負責人清單

Exists + Not Exists

1
2
3
4
5
6
--取得包含於負責人清單,但不包含分店負責人清單中的負責人的總販賣業績(販賣單價*數量)
select sum(B.販賣單價 * A.數量) "總業績" 
from [販賣資料] A
join [商品清單] B on B.商品ID = A.商品ID
where exists (select 負責人ID from [負責人清單] T1 where T1.負責人ID = A.負責人ID) --包含於負責人清單
and not exists (select [分店負責人ID] from [分店負責人清單] T2 where T2.分店負責人ID = A.負責人ID ) --不包含分店負責人清單

[SQL] 集合運算子 Except (差集)

This post is licensed under CC BY 4.0 by the author.

[SQL] 集合運算子 Except (差集)

[SQL] 集合運算子 Union (聯集)、Except (差集)、Intersect (交集)