Ⅰ sql怎樣查詢機台所對應的消費金額
如果系統沒有匯總數據的話,通常需要使用動態SQL語句,臨時表處理
你可以查查資料庫的動態sql語句如何寫,比如:sqlserver,oracle都不太一樣
Ⅱ 怎麼用sql語句怎麼計算消費積分
update xf set 消費積分=消費金額
where exists (select 1 from gk where gk.是否會員='T' and gk.顧客編號=xf.顧客編號)
update xf set 消費積分=消費金額/2
where exists (select 1 from gk where gk.是否會員='F' and gk.顧客編號=xf.顧客編號)
Ⅲ 用sql語句查詢消費的金額都大於100的用戶
MYSQL語法,請參考:
SELECTt.`user`FROMtabletGROUPBYt.`user`HAVINGMIN(t.money)>=100
Ⅳ SQL有兩張表,a表是記錄會員購買的商品 b表記錄消費的總金額,如何同步更新b表的消費總金額
可以使用【for或after】觸發器來實現。
CREATE TRIGGER 觸發器名
ON A表表名
FOR DELETE,UPDATE,INSERT
AS
BEGIN
--這里是對B表做統計更新的業務邏輯
--按照你的業務,初步想到的有兩種方式。
--一種是當對A表做增刪改,則對B表相應的會員做重新統計更新
--第二種是對A表的增刪改,則對B表相應的會員總金額做加減
END
大致思路就是這樣子的,實在不會寫的話,需要你貼出你的表結構我才能幫上忙。
Ⅳ sql語句分別按日,按周,按月,按季統計金額
表:consume_record
欄位:consume (money類型)
date (datetime類型)
請問怎麼寫四條sql語句分別按日,按周,按月,按季統計消費總量.
如:1月 1200元
2月 3400元
3月 2800元
--按日
selectsum(consume),day([date])fromconsume_recordwhereyear([date])='2006'groupbyday([date])
--按周quarter
selectsum(consume),datename(week,[date])fromconsume_recordwhereyear([date])='2006'groupbydatename(week,[date])
--按月
selectsum(consume),month([date])fromconsume_recordwhereyear([date])='2006'groupbymonth([date])
--按季
selectsum(consume),datename(quarter,[date])fromconsume_recordwhereyear([date])='2006'groupbydatename(quarter,[date])
當然,如果你的oracle報錯:'month'函數報錯,可以試試 to_char(b.PAYMENT_TIME,'yyyy-mm')
檔
Ⅵ 如何使用SQL將消費明細表中,任意兩個月累計消費達到一定金額的人篩選出來
1.按人每月匯總金額
select 姓名,SUBSTRING('1月2日',1,CHARINDEX('月','1月2日')-1) as 月份,sum(金額) as 月總金額 into #1 from table1 group by 姓名,SUBSTRING('1月2日',1,CHARINDEX('月','1月2日')-1)
2.取人月最大消費
select distinct 姓名,月份,max(月總金額) as 單月最大金額 into #2 from #1 group by 姓名,月份
3.取人月第二大消費
select distinct 姓名,月份,max(月總金額) as 第二大消費 from #1 where not exists(select top 1 1 from #2 where #2.姓名=#1.姓名 and #2.月份=#1.月份) group by 姓名,月份
4.2步3步相加
select 姓名,單月最大金額+第二大消費 from #2 a left join #3 b on b.姓名=a.姓名 AND B.月份=A.月份 where 單月最大金額+第二大消費>=5000
Ⅶ SQL建立RFM模型指標的兩種方法對比
本筆記將利用sql語言構建RFM模型,將會有兩種辦法對用戶進行分類。
第一種方法是基於有明確業務指標計算RFM分值。
第二種是按二八定律設定閥值。
首先看看RFM模型是什麼?
R值:Rencency(最近一次消費) 指的是用戶在店鋪最近一次購買時間距離分析點的時間間隔;
F值:Frequency(消費頻率) 指的是是用戶在固定時間內的購買次數;
M值:Monetary(消費金額) 指的是一段時間(通常是1年)內的消費金額;
根據三個值的高低之分,會得出8種類型的客戶;
一般每個指標都會有1,2,3,4,5分的分值標准,此指標一般根據具體業務需求進行設置;
如:
然後根據以上標准對用戶進行打分,並會求得各指標均值,進行比較,大於均值為高,少於均值為低。
接下來按照此標准用sql執行。
首先我們導入相關數據,並去重數據放進新表 temp_trade;
由於時間關系,以導入如下數據,期間利用
SET date_time = STR_TO_DATE(time,'%Y-%m-%d %H');
set dates=date(date_time);
這兩個函數對原表(紅框)日期進行處理;
再檢查一下關鍵欄位有無缺失值
查詢後得出並無缺失。
再檢查一下用戶行為是否有1、2、3、4以外的異常值;
查詢結果無異常值;
-- 建新表,放進 去重後的 數據
create table temp_trade like o_retailers_trade_user;
insert into temp_trade select distinct * from o_retailers_trade_user;
SELECT user_id , max(dates) AS 最近一次消費時間
FROM
temp_trade
WHERE behavior_type='2'
GROUP BY user_id
ORDER BY 最近一次消費時間 desc
CREATE VIEW r_clevel AS
SELECT user_id , 最近一次消費時間 , DATEDIFF('2019-12-19',最近一次消費時間) AS 相差天數,
(CASE
WHEN DATEDIFF('2019-12-19',最近一次消費時間)<=2 THEN 5
WHEN DATEDIFF('2019-12-19',最近一次消費時間)<=4 THEN 4
WHEN DATEDIFF('2019-12-19',最近一次消費時間)<=6 THEN 3
WHEN DATEDIFF('2019-12-19',最近一次消費時間)<=8 THEN 2
ELSE
1 END )AS R分值
FROM
(
SELECT user_id , max(dates) AS 最近一次消費時間
FROM
temp_trade
WHERE behavior_type='2'
GROUP BY user_id
ORDER BY 最近一次消費時間 desc
)a
SELECT user_id , COUNT(user_id) AS 購買頻次
FROM
temp_trade
WHERE behavior_type='2'
GROUP BY user_id
ORDER BY 購買頻次 desc
CREATE VIEW f_clevel AS
SELECT user_id , 購買頻次 ,
(CASE
WHEN 購買頻次<=2 THEN 1
WHEN 購買頻次<=4 THEN 2
WHEN 購買頻次<=6 THEN 3
WHEN 購買頻次<=8 THEN 4
ELSE 5 END )AS F分值
FROM
(
SELECT user_id , COUNT(user_id) AS 購買頻次
FROM
temp_trade
WHERE behavior_type='2'
GROUP BY user_id
)a
-- 1.R平均值
SELECT avg(R分值) as 'r_avg' FROM r_clevel;
-- 2.F平均值
select avg(F分值) as 'f_avg' from f_clevel;
create view RFM_table
as
select a.*,b.分值,
(case
when a.分值>2.5515 and b.分值>2.2606 then '重要高價值客戶' when a.分值<2.5515 and b.分值>2.2606 then '重要喚回客戶'
when a.分值>2.5515 and b.分值<2.2606 then '重要深耕客戶' when a.分值<2.5515 and b.分值<2.2606 then '重要挽留客戶' END
) as user_class
from r_clevel a, f_clevel b
where a.user_id=b.user_id;
SELECT user_class , COUNT(user_class)AS 數量
FROM
RFM_table
GROUP BY user_class
SELECT COUNT(DISTINCT user_id) AS 購買用戶數
FROM
temp_trade
WHERE behavior_type='2'
SELECT
相差天數
FROM
(
SELECT user_id , 最近一次消費時間 , DATEDIFF('2019-12-19',最近一次消費時間) AS 相差天數
FROM
(
SELECT user_id , max(dates) AS 最近一次消費時間
FROM
temp_trade
WHERE behavior_type='2'
GROUP BY user_id
ORDER BY 最近一次消費時間 desc
)a
ORDER BY 相差天數 DESC
)b
LIMIT 32,1
SELECT
購買頻次
FROM
(
SELECT user_id , 購買頻次
FROM
(
SELECT user_id , COUNT(user_id) AS 購買頻次
FROM
temp_trade
WHERE behavior_type='2'
GROUP BY user_id
ORDER BY 購買頻次 DESC
)a
)b
LIMIT 32,1
CREATE VIEW RF_TABLE AS
SELECT user_id , 最近一次消費時間 , DATEDIFF('2019-12-19',最近一次消費時間) AS 相差天數,購買頻次
FROM
(
SELECT user_id , max(dates) AS 最近一次消費時間 , COUNT(user_id) AS 購買頻次
FROM
temp_trade
WHERE behavior_type='2'
GROUP BY user_id)a
select user_id,
(case
when 相差天數<=19 and 購買頻次>=7 then '重要高價值客戶' when 相差天數>19 and 購買頻次>=7 then '重要喚回客戶'
when 相差天數<=19 and 購買頻次<7 then '重要深耕客戶' when 相差天數>19 and 購買頻次<7 then '重要挽留客戶' END
) as user_class
from RF_TABLE ;
SELECT user_class , COUNT(user_class)AS 數量
FROM
(
select user_id,
(case
when 相差天數<=19 and 購買頻次>=7 then '重要高價值客戶' when 相差天數>19 and 購買頻次>=7 then '重要喚回客戶'
when 相差天數<=19 and 購買頻次<7 then '重要深耕客戶' when 相差天數>19 and 購買頻次<7 then '重要挽留客戶' END
) as user_class
from RF_TABLE
) a
GROUP BY user_class
Ⅷ 寫一個SQL查詢,列出每個客戶的消費總額
select "客戶", sum("消費1", "消費2", "消費3","消費4", "消費5") as "消費總額" from 表名 group by "客戶";
這樣寫試一下,看看是否好用。