鋒利的SQL 地域範圍內最大數統計

2021-06-12 00:28:49 字數 2388 閱讀 2687

這是在做乙個客戶管理系統時遇到的問題,公司每年需要按銷售區域評選出購買量最大的客戶進行單獨獎勵。區域劃分使用地域編碼起止區間方式,例如,華東地區的起止編碼是

10001

~10003

,在10001

、10002

、10003

區域的客戶都隸屬於華東地區。下面是建立示例的**,

area

表中存放著區域劃分範圍,

sales

存放著每個區域中客戶的購買資訊。

create table areas

(area_name char(25) not null,

start_codeint not null,

end_codeint not null,

check(start_code <= end_code));

create table sales

(sale_id int,

cust_namechar(15),

cust_codeint,

sale_amtdecimal (8,2));

insert into areas

values ('

華東', 10001, 10003), ('

華南', 10004, 10006), ('

華北', 10007, 10009);

insert into sales

values (1, '

張三', 10001, 1000.00),

(2, '

張三', 10002, 1000.00),

(3, '

李四', 10001, 4000.00),

(4, '

王五', 10005, 1000.00),

(5, '

王五', 10006, 2000.00),

(6, '

趙六', 10004, 1500.00);

要統計出每個區域中購買量最大的客戶,我們首先想到的是使用

group by

select a.area_name, s.cust_name, sum(s.sale_amt)as sale_amt

from areas as a

join salesas s

ons.cust_code between a.start_code and a.end_code

group by a.area_name, s.cust_name

order by area_name;

表19-12

使用group by

按區域、客戶分類彙總結果

area_name

cust_name

sale_amt華東

李四4000.00華東

張三 2000.00華南

王五 3000.00華南

趙六 1500.00

從上表可以看出,在華東地區李四的購買量最大,華南地區王五的購買量最大。如果僅統計每地區的最大銷售額,不考慮客戶名稱,完全可以在上表的基礎上使用類似下面的語句:

select area_name, max(sale_amt)

from [

表19-21]

group by area_name;

下面的語句將

group by

分組統計封裝在

cte中,然後將

cte開啟兩次,取出每區域中購買量最大的客戶。查詢結果如表

19-13

所示。with cte (area_name, cust_name, sale_amt)

as (select a.area_name, s.cust_name,sum(s.sale_amt)

fromareas as a

joinsales as s

ons.cust_code between a.start_code and a.end_code

group bya.area_name, s.cust_name)

select c1.area_name, c1.cust_name, c1.sale_amt

from cte as c1

where c1.sale_amt = (select max(c2.sale_amt)

from cte as c2

where c2.area_name =c1.area_name); 表

19-13

查詢結果

area_name

cust_name

sale_amt華南

王五3000.00華東

李四 4000.00

求指定範圍內的最大數

同學們都知道,無論哪個語言入門學習時,第乙個sample都是 hello world!我們學習演算法,第乙個入門的問題也許就是求給定輸入的最大或者最小,那麼我們今天也來求解這個問題,只不過我們今天需要你求的是指定範圍內的最大值。input 本問題有多組測試資料,每一組有兩行,其中第一行有三個整數n,...

範圍內資料查詢的sql

between and 查詢範圍內的sql select from 表名 where 要查詢的字段 between 範圍的開始 and 範圍的結束 如果你的資料庫儲存的是時間戳的話,想要查詢某一天到某一天的範圍的話,可以使用這個,當然如果你的資料庫儲存的不是時間戳,也可以使用 to days to ...

sql 指定範圍內的隨機數

cast rand 0.2 0.4 as dec 14,2 通過 rand 0.2 來確定初步範圍,通過 0.4來確定最終範圍 cast a as b 將a的替換為b的格式,b為資料型別 cast expression as data type 引數說明 expression 任何有效的sqserv...