Ⅰ 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 "客户";
这样写试一下,看看是否好用。