SQL語句練習實例之四 找出促銷活動中銷售額最高
導讀:1建站知識你剛在一家服裝銷售公司中找到了一份工作,此時經理要求你根據數據庫中的兩張表得到促銷活動銷售額最高的銷售網站建設公司建設網站。
復制代碼 代碼如下:
---找出促銷活動中銷售額最高的職員 ---你剛在一家服裝銷售公司中找到了一份工作,此時經理要求你根據數據庫中的兩張表得到促銷活動銷售額最高的銷售員 ---1.一張是促銷活動表 ---2.一張是銷售客列表 create table Promotions ( activity nvarchar(30), sdate datetime, edate datetime ) insert Promotions select '五一促銷活動','2011-5-1','2011-5-7' union select '十一促銷活動','2011-10-1','2011-10-7' union select 'OA專場活動','2011-6-1','2011-6-7' go create table sales ( id int not null, name nvarchar(20), saledate datetime, price money ) go insert sales select 1,'王五','2011-5-1',1000 union select 1,'王五','2011-5-2',2000 union select 1,'王五','2011-5-3',3000 union select 1,'王五','2011-5-4',4000 union select 1,'張三','2011-5-1',1000 union select 1,'張三','2011-5-3',2000 union select 1,'張三','2011-5-4',4000 union select 1,'李四','2011-5-6',1000 union select 1,'趙六','2011-5-5',1000 union select 1,'錢七','2011-5-8',1000 union select 1,'孫五','2011-6-1',1000 union se建設網站lect 1,'孫五','2011-6-2',2000 union select 1,'王五','2011-6-3',3000 union select 1,'孫五','2011-6-4',4000 union select 1,'張三','2011-6-1',11000 union select 1,'張三','2011-6-3',20000 union select 1,'張三','2011-6-4',4000 union select 1,'李四','2011-6-6',1000 union select 1,'趙六','2011-6-5',1000 union select 1,'錢七','2011-6-8',1500 union select 1,'孫五','2011-10-1',11000 union select 1,'孫五','2011-10-2',12000 union select 1,'王五','2011-10-3',9000 union select 1,'孫五','2011-10-4',4000 union select 1,'張三','2011-10-1',11000 union select 1,'張三','2011-10-3',2000 union select 1,'張三','2011-10-4',4000 union select 1,'李四','2011-10-6',27000 union select 1,'趙六','2011-10-5',9000 union select 1,'錢七','2011-10-8',3000 go -----我們需要找出在每次的促銷活動中,其銷售總額大于 等于 ---所有其他職員銷售額的職員及促銷事件。 ---說明:謂詞a2.name<>a.name將其他職員從子查詢合計中排除出去 ---------謂詞Between 中的子查詢確保我們使用了正確的促銷日期 --方法一: select a.name,b.activity,SUM(a.price) as totalprice from sales a ,Promotions as b where a.saledate between b.sdate and b.edate group by a.name,b.activity having SUM(price)>= all(select SUM(price) from sales a2 where a2.name<>a.name and a2.saledate between ( select sdate from Promotions as b2 where b2.activity=b.activity ) and (select edate from Promotions b3 where b3.activity=b.activity) group by a2.name) ----------------- ---方法二: ---說明: 如果促銷活動時間是不重疊的,則promotions表中只有一個主鍵列,這樣在group by --子句中使用(activity,sdate,edate)將不會改變。但是它將使having子句可以使用sdate和edate select a.name,b.activity,SUM(a.price) as totalprice from sales a ,Promotions as b where a.saledate betwee企業網站建設n b.sdate and b.edate group by b.activity,b.sdate,b.edate,a.name having SUM(price)>= all(select SUM(price) from sales a2 where a2.name<>a.name and a2.saledate between b.sdate and b.edate group by a2.name) go --方法三: ---使用cte(sql 2005以后的版本) with clearksTotal(name,activity,totalp網seo優化趨勢rice) as ( select a.name,b.activity,SUM(price) from sales a ,Promotions b where a.saledate between b.sdate and b.edate group by a.name,b.activity ) select c1.name,c1.activity,c1.totalprice from clearksTotal c1 where totalprice=(select MAX(c2.totalprice) from clearksTotal c2 where c1.activity=c2.activity) go drop table Promotions go drop table sales
聲明: 本文由我的SEOUC技術文章主頁發布于:2023-05-21 ,文章SQL語句練習實例之四 找出促銷活動中銷售額最高主要講述銷售額,之四,SQL網站建設源碼以及服務器配置搭建相關技術文章。轉載請保留鏈接: http://www.bifwcx.com/article/web_3898.html