
需要用到的表:
订单明细表:order_detail
![]() | |||||
代码:
select sku_id from ( select sku_id ,sale_num ,dense_rank() over (order by sale_num desc ) as drp from ( select sku_id ,sum(sku_num) as sale_num from order_detail group by sku_id )a )b where drp = 2
结果:


订单信息表:order_info
| order_id | user_id | create_date | total_amount |
| 1 | 101 | 2021-09-30 | 29000.00 |
| 10 | 103 | 2020-10-02 | 28000.00 |
代码
select distinct user_id from ( select user_id ,date1 ,case when (datediff(date2,date1)=1 and datediff(date3,date2)=1 and datediff(date3,date1)=2) then 1 else 0 end diff from ( select distinct user_id ,create_date as date1 ,lead(create_date) over (partition by user_id order by create_date) as date2 ,lead(create_date,2) over (partition by user_id order by create_date) as date3 from (select distinct user_id,create_date from order_info )a )b )c where diff =1
结果

期望结果如下:
| category_id | category_name | sku_id | name | order_num | sku_cnt |
| 1 | 数码 | 2 | 手机壳 | 302 | 4 |
| 2 | 厨卫 | 8 | 微波炉 | 253 | 4 |
| 3 | 户外 | 12 | 遮阳伞 | 349 | 4 |
需要用到的表
订单明细表:order_detail
| order_detail_id | order_id | sku_id | create_date | price | sku_num |
| 1 | 1 | 1 | 2021-09-30 | 2000.00 | 2 |
| 2 | 1 | 3 | 2021-09-30 | 5000.00 | 5 |
| 22 | 10 | 4 | 2020-10-02 | 6000.00 | 1 |
| 23 | 10 | 5 | 2020-10-02 | 500.00 | 24 |
| 24 | 10 | 6 | 2020-10-02 | 2000.00 | 5 |
商品信息表:sku_info
| sku_id | name | category_id | from_date | price |
| 1 | xiaomi 10 | 1 | 2020-01-01 | 2000 |
| 6 | 洗碗机 | 2 | 2020-02-01 | 2000 |
| 9 | 自行车 | 3 | 2020-01-01 | 1000 |
商品分类信息表:category_info
| category_id | category_name |
| 1 | 数码 |
| 2 | 厨卫 |
| 3 | 户外 |
代码:
with t1 as ( select a.category_id ,b.category_name ,count(sku_id) as sku_cnt from sku_info a left join category_info b on a.category_id =b.category_id group by a.category_id ,b.category_name) , t2 as ( select * from ( select category_id ,sku_id ,name ,order_num ,rank() over(partition by category_id order by order_num desc) rk from ( select b.category_id ,a.sku_id ,b.name ,sum(a.sku_num) as order_num from order_detail a left join sku_info b on a.sku_id=b.sku_id group by b.category_id ,a.sku_id ,b.name )a )b where rk='1' ) select t2.category_id ,t1.category_name ,t2.sku_id ,t2.name ,t2.order_num ,t1.sku_cnt from t2 left join t1 on t2.category_id = t1.category_id
结果:

用户vip等级根据累积消费金额计算,计算规则如下:
设累积消费总额为X,
若0=<X<10000,则vip等级为普通会员
若10000<=X<30000,则vip等级为青铜会员
若30000<=X<50000,则vip等级为白银会员
若50000<=X<80000,则vip为黄金会员
若80000<=X<100000,则vip等级为白金会员
若X>=100000,则vip等级为钻石会员
期望结果如下:
| user_id | create_date | sum_so_far | vip_level |
| 101 | 2021-09-27 | 29000.00 | 青铜会员 |
| 101 | 2021-09-28 | 99500.00 | 白金会员 |
| 101 | 2021-09-29 | 142800.00 | 钻石会员 |
| 101 | 2021-09-30 | 143660.00 | 钻石会员 |
| 102 | 2021-10-01 | 171680.00 | 钻石会员 |
| 102 | 2021-10-02 | 177850.00 | 钻石会员 |
| 103 | 2021-10-02 | 69980.00 | 黄金会员 |
| 103 | 2021-10-03 | 75890.00 | 黄金会员 |
| 104 | 2021-10-03 | 89880.00 | 白金会员 |
| 105 | 2021-10-04 | 120100.00 | 钻石会员 |
| 106 | 2021-10-04 | 9390.00 | 普通会员 |
| 106 | 2021-10-05 | 119150.00 | 钻石会员 |
| 107 | 2021-10-05 | 69850.00 | 黄金会员 |
| 107 | 2021-10-06 | 124150.00 | 钻石会员 |
| 108 | 2021-10-06 | 101070.00 | 钻石会员 |
| 108 | 2021-10-07 | 155770.00 | 钻石会员 |
| 109 | 2020-10-08 | 24020.00 | 青铜会员 |
| 109 | 2021-10-07 | 153500.00 | 钻石会员 |
| 1010 | 2020-10-08 | 51950.00 | 黄金会员 |
需要用到的表:
订单信息表:order_info
| order_id | user_id | create_date | total_amount |
| 1 | 101 | 2021-09-30 | 29000.00 |
| 10 | 103 | 2020-10-02 | 28000.00 |
代码
select
*
,case when (sum_so_far >=0 and sum_so_far <10000) then '普通会员'
when (sum_so_far >=10000 and sum_so_far <30000) then '青铜会员'
when (sum_so_far >=30000 and sum_so_far <50000) then '白银会员'
when (sum_so_far >=50000 and sum_so_far <80000) then '黄金会员'
when (sum_so_far >=80000 and sum_so_far <100000) then '白金会员'
else '钻石会员' end vip_level
from (
select
user_id
,create_date
,sum(sum_so_far) over(partition by user_id order by create_date rows BETWEEN unbounded preceding and current row ) as sum_so_far
from
(
select
user_id
,create_date
,sum(total_amount) as sum_so_far
from order_info
group by
user_id
,create_date
)a
)b
期望结果如下:
| percentage |
| 70.0% |
需要用到的表:
订单信息表:order_info
| order_id (订单id) | user_id (用户id) | create_date (下单日期) | total_amount (订单金额) |
| 1 | 101 | 2021-09-30 | 29000.00 |
| 10 | 103 | 2020-10-02 | 28000.00 |
代码
with t as ( select user_id ,create_date as date1 ,lag(create_date,1,'null') over(partition by user_id order by create_date ) as date2 ,lead(create_date) over(partition by user_id order by create_date ) as date3 from (select distinct user_id,create_date from order_info)a ) select concat(round(avg(if(datediff(date3,date1)=1,1,0))*100,1),'%') as percentage from t where date2='null'
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我找到了这样的东西:Rails:Howtolistdatabasetables/objectsusingtheRailsconsole?这一行没问题:ActiveRecord::Base.connection.tables并返回所有表但是ActiveRecord::Base.connection.table_structure("users")产生错误:ActiveRecord::Base.connection.table_structure("projects")我认为table_structure不是Postgres方法。如何列出Postgres数据库的Rails控制台中表中的所有
Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject
我正在编写一个Rails应用程序,它将监视某些特定数据库的数据质量。为了做到这一点,我需要能够对这些数据库执行直接SQL查询——这当然与用于驱动Rails应用程序模型的数据库不同。简而言之,这意味着我无法使用通过ActiveRecord基础连接的技巧。我需要连接的数据库在设计时是未知的(即:我不能将它们的详细信息放在database.yaml中)。相反,我有一个模型“database_details”,用户将使用它来输入应用程序将在运行时执行查询的数据库的详细信息。因此与这些数据库的连接实际上是动态的,细节仅在运行时解析。 最佳答案
我正在使用Rails4应用程序,它需要创建大量对象以响应来自另一个系统的事件。当我调用create!时,主键列上出现非常频繁的ActiveRecord::RecordNotUnique错误(由PG::UniqueViolation引起)我的模型之一。我在SO上找到了其他答案,建议挽救异常并调用retry:beginTableName.create!(data:'here')rescueActiveRecord::RecordNotUnique=>eife.message.include?'_pkey'#Onlyretryprimarykeyviolationslog.warn"Retr
我有一个PORO(普通旧Ruby对象)来处理一些业务逻辑。它接收一个ActiveRecord对象并对其进行分类。为了简单起见,以下面为例:classClassificatorSTATES={1=>"Positive",2=>"Neutral",3=>"Negative"}definitializer(item)@item=itemenddefnameSTATES.fetch(state_id)endprivatedefstate_idreturn1if@item.value>0return2if@item.value==0return3if@item.value但是,我还想根据这些st
我正在使用ARincludes在对象User和Building之间执行LEFTOUTERJOIN的方法,其中User可能有也可能没有Building关联:users=User.includes(:building).references(:buildings)因为我正在使用references,任何关联的Building对象都将被预先加载。我的期望是我随后能够遍历用户列表,并检查用户是否有与其关联的建筑物而不会触发额外的查询,但实际上每当我尝试访问建筑物属性时我都会看到对于没有建筑物的用户,AR会进行另一个SQL调用以尝试检索该建筑物(尽管在后续尝试中它只会返回nil)。这些查询显然是
我有以下模型:activity.rbtag.rbtagging.rb标签是事件和标签的连接模型。我想搜索具有2个或更多标签的事件。我如何在Rails中执行此操作?例如:我有tag1=Christmas,tag2=Florida,tag3=John如果存在,我想找到tag1、tag2和tag3存在的Activity。[编辑]我最终做了什么:tags=[tag1,tag2,tag3]activities=[]tags.eachdo|tag|activities如果任何组值的大小等于tags.size,则该事件包含所有标签。 最佳答案 如
在我的Rails应用程序中,我有users,它可以有许多invoices,而invoices又可以有许多payments。现在在dashboardView中,我想总结一个user曾经收到的所有payments,按年、季度或月。付款也分割为毛额、Netty和税额。user.rb:classUser:items).allpayments_with_invoice.select{|x|range.cover?x.date}.sum(&:"#{kind}_amount")endend发票.rb:classInvoicepayment.rb:classPaymentdashboards_cont