mysql筆試題


-- 查詢每位會員在7月份的訂單數、訂單總額,並以訂單總額進行降序排列

select 
	dimMemberID, -- 會員ID
	count(salesID) as 'order_num', -- 訂單數
	sum(AMT) as 'total_AMT' -- 訂單總額  
from dw.fct_sales t1
where date_format(dimDateID,'%Y%m')='201707' and dimMemberID <> 0
group by dimMemberID 
order by sum(AMT) desc;


-- 查詢7月2日當天累計消費金額在100元以上的會員,統計他們的累計消費金額及累計消費金額占當天銷售總額的比重,並進行降序排列

select 
	dimMemberID, -- 會員ID
	total_AMT, -- 會員累計消費金額
	total_AMT/(select sum(AMT) from dw.fct_sales where dimDateID='20170702' and dimMemberID <> 0) as 'percent_AMT' -- 消費額占比
from
	(select 
			dimMemberID, -- 會員ID
		  sum(AMT) as 'total_AMT' -- 會員累計消費金額
	from dw.fct_sales
	where dimDateID='20170702' and dimMemberID <> 0
	group by dimMemberID
	having sum(AMT)>100) t
order by percent_AMT desc;


-- 查詢7月份每天及整月的會員數、會員銷售總額、會員銷售訂單量

select 
	'7月每天',
	count(distinct dimMemberID), -- 每天會員數
	sum(AMT), -- 每天會員銷售額
	count(salesID) -- 每天會員訂單量
from dw.fct_sales
where date_format(dimDateID,'%Y%m') = '201707' and dimMemberID <> 0
group by dimDateID 

union 

select 
	'7月整月',
	count(distinct dimMemberID), -- 整月會員數
	sum(AMT), -- 整月會員銷售額
	count(salesID) -- 整月會員訂單量
from dw.fct_sales
where date_format(dimDateID,'%Y%m') = '201707' and dimMemberID <> 0


-- 查詢7月份每位會員的第一次購物時間,最后一次購物時間,第一次到最后一次購物的間隔。

select 
	dimMemberID, -- 會員ID
	min(dimDateID), -- 第一次購物時間
	max(dimDateID), -- 最后一次購物時間
	datediff(max(dimDateID),min(dimDateID)) -- 購物時間間隔
from dw.fct_sales
where date_format(dimDateID,'%Y%m')='201707' and dimMemberID <> 0
group by dimMemberID;



-- 查找7月份第二周訂單數最多的會員的所有消費記錄

set @start_date := '20170709';
set @end_date := '20170715';

select *
from dw.fct_sales
where dimDateID between @start_date and @end_date and dimMemberID <> 0 
and dimMemberID in
	(select dimMemberID -- 獲取消費記錄最多的會員ID
	 from 
		 (select 
				dimMemberID,
			  count(salesID)
		from dw.fct_sales
		where dimDateID between @start_date and @end_date and dimMemberID <> 0
		group by dimMemberID
		order by count(salesID) desc
		limit 1) v
	)
	

-- 對7月份第二周每位會員累計購買金額進行分段統計(分段范圍自行確定),並統計每段的會員數,每段內的平均消費金額

set @start_date := '20170709';
set @end_date := '20170715';

select 
	(case when total_AMT >=0 and total_AMT < 100 then '低消費'
	      when total_AMT >=100 and total_AMT < 200 then '中消費'
	      when total_AMT >=200 then '高消費'
	      else '數據異常' end) as div_AMT, -- 消費金額分級
	 count(distinct dimMemberID), -- 會員數
	 avg(total_AMT) -- 平均消費額
from 
	(select 
			dimMemberID,
		  sum(AMT) as 'total_AMT'
	 from dw.fct_sales
	 where dimDateID between @start_date and @end_date and dimMemberID <> 0 
	 group by dimMemberID) t
group by div_AMT




-- 查詢201707月內每周及當月總計會員消費金額、會員訂單量、會員數、會員訂單數占比(當周會員訂單數與整月會員訂單數比)、會員滲透率(當周會員數與當月會員數的比)

SELECT
		CASE
			WHEN t.wweek IS NULL THEN '總計' ELSE t.wweek END AS weeknumber,
		t.sale_money,
		t.order_number,
		t.mem_number,
		t.order_rate,
		t.mem_rate 
	FROM
		(
		SELECT 
			WEEK(dimDateID, 1) AS wweek,
			sum(AMT) AS sale_money,
			count(DISTINCT salesNo) AS order_number,
			count(DISTINCT dimMemberID) AS mem_number,
			count(DISTINCT salesNo) / (SELECT count(DISTINCT salesNo) FROM dw.fct_sales WHERE dimDateID BETWEEN 20170701 AND 20170731 AND dimMemberID <> 0) AS order_rate,
			count(DISTINCT dimMemberID) / (SELECT count(DISTINCT dimMemberID) FROM dw.fct_sales WHERE dimDateID BETWEEN 20170701 AND 20170731 AND dimMemberID <> 0) AS mem_rate 
		FROM
			dw.fct_sales 
		WHERE
			dimDateID BETWEEN 20170701 AND 20170731 AND dimMemberID <> 0 
		GROUP BY WEEK ( dimDateID, 1 ) WITH ROLLUP 
	) t;

  

-- 查詢每位會員在7月份的訂單數、訂單總額,並以訂單總額進行降序排列
select dimMemberID, -- 會員IDcount(salesID) as 'order_num', -- 訂單數sum(AMT) as 'total_AMT' -- 訂單總額  from dw.fct_sales t1where date_format(dimDateID,'%Y%m')='201707' and dimMemberID <> 0group by dimMemberID order by sum(AMT) desc;

-- 查詢7月2日當天累計消費金額在100元以上的會員,統計他們的累計消費金額及累計消費金額占當天銷售總額的比重,並進行降序排列
select dimMemberID, -- 會員IDtotal_AMT, -- 會員累計消費金額total_AMT/(select sum(AMT) from dw.fct_sales where dimDateID='20170702' and dimMemberID <> 0) as 'percent_AMT' -- 消費額占比from(select dimMemberID, -- 會員ID  sum(AMT) as 'total_AMT' -- 會員累計消費金額from dw.fct_saleswhere dimDateID='20170702' and dimMemberID <> 0group by dimMemberIDhaving sum(AMT)>100) torder by percent_AMT desc;

-- 查詢7月份每天及整月的會員數、會員銷售總額、會員銷售訂單量
select '7月每天',count(distinct dimMemberID), -- 每天會員數sum(AMT), -- 每天會員銷售額count(salesID) -- 每天會員訂單量from dw.fct_saleswhere date_format(dimDateID,'%Y%m') = '201707' and dimMemberID <> 0group by dimDateID 
union 
select '7月整月',count(distinct dimMemberID), -- 整月會員數sum(AMT), -- 整月會員銷售額count(salesID) -- 整月會員訂單量from dw.fct_saleswhere date_format(dimDateID,'%Y%m') = '201707' and dimMemberID <> 0

-- 查詢7月份每位會員的第一次購物時間,最后一次購物時間,第一次到最后一次購物的間隔。
select dimMemberID, -- 會員IDmin(dimDateID), -- 第一次購物時間max(dimDateID), -- 最后一次購物時間datediff(max(dimDateID),min(dimDateID)) -- 購物時間間隔from dw.fct_saleswhere date_format(dimDateID,'%Y%m')='201707' and dimMemberID <> 0group by dimMemberID;


-- 查找7月份第二周訂單數最多的會員的所有消費記錄
set @start_date := '20170709';set @end_date := '20170715';
select *from dw.fct_saleswhere dimDateID between @start_date and @end_date and dimMemberID <> 0 and dimMemberID in(select dimMemberID -- 獲取消費記錄最多的會員ID from  (select dimMemberID,  count(salesID)from dw.fct_saleswhere dimDateID between @start_date and @end_date and dimMemberID <> 0group by dimMemberIDorder by count(salesID) desclimit 1) v)
-- 對7月份第二周每位會員累計購買金額進行分段統計(分段范圍自行確定),並統計每段的會員數,每段內的平均消費金額
set @start_date := '20170709';set @end_date := '20170715';
select (case when total_AMT >=0 and total_AMT < 100 then '低消費'      when total_AMT >=100 and total_AMT < 200 then '中消費'      when total_AMT >=200 then '高消費'      else '數據異常' end) as div_AMT, -- 消費金額分級 count(distinct dimMemberID), -- 會員數 avg(total_AMT) -- 平均消費額from (select dimMemberID,  sum(AMT) as 'total_AMT' from dw.fct_sales where dimDateID between @start_date and @end_date and dimMemberID <> 0  group by dimMemberID) tgroup by div_AMT



-- 查詢201707月內每周及當月總計會員消費金額、會員訂單量、會員數、會員訂單數占比(當周會員訂單數與整月會員訂單數比)、會員滲透率(當周會員數與當月會員數的比)
SELECTCASEWHEN t.wweek IS NULL THEN '總計' ELSE t.wweek END AS weeknumber,t.sale_money,t.order_number,t.mem_number,t.order_rate,t.mem_rate FROM(SELECT WEEK(dimDateID, 1) AS wweek,sum(AMT) AS sale_money,count(DISTINCT salesNo) AS order_number,count(DISTINCT dimMemberID) AS mem_number,count(DISTINCT salesNo) / (SELECT count(DISTINCT salesNo) FROM dw.fct_sales WHERE dimDateID BETWEEN 20170701 AND 20170731 AND dimMemberID <> 0) AS order_rate,count(DISTINCT dimMemberID) / (SELECT count(DISTINCT dimMemberID) FROM dw.fct_sales WHERE dimDateID BETWEEN 20170701 AND 20170731 AND dimMemberID <> 0) AS mem_rate FROMdw.fct_sales WHEREdimDateID BETWEEN 20170701 AND 20170731 AND dimMemberID <> 0 GROUP BY WEEK ( dimDateID, 1 ) WITH ROLLUP ) t;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM