面试遇到的订单表sql的解决方案
对于以下需求:用户表:users (user_id int)
订单表:order_tb(user_id int, or_time date, or_money double)
求以下用户:
一月下过单,二月份没有下过单的三月份下单用户
的如下指标:
三月份订单金额大于100的订单数,三月份第一笔订单和最后一笔订单的订单金额。(每个用户的哦)
网上求得如下解答,比自己之前写的几百行好多了。不知道有没有其它解决方案
with us1 as (select user_id,or_time,or_money,
sum(nvl(case when to_char(or_time,'MM') = '01' then 1 end,0)) over (partition by user_id) m1,
sum(nvl(case when to_char(or_time,'MM') = '02' then 1 end,0)) over (partition by user_id) m2,
sum(nvl(case when to_char(or_time,'MM') = '03' then 1 end,0)) over (partition by user_id) m3,
sum(case when to_char(or_time,'MM') = 03 and or_money > 100 then 1 end) over (partition by user_id) cnt
from order_tb
where or_time between to_date('20170101','YYYYMMDD') and to_date('20170331','YYYYMMDD')),
mo1 as (select distinct user_id,
case when to_char(or_time,'MM') = 03 then first_value(or_money) over (partition by user_id order by or_time) end f1v,
case when to_char(or_time,'MM') = 03 then last_value(or_money) over (partition by user_id order by or_time range between unbounded preceding and unbounded following) end f3l,
cnt from (select * from us1 where m2=0 and m1 >0 and m3 >0 and or_time between to_date('20170301','YYYYMMDD') and to_date('20170331','YYYYMMDD')))
面试遇到的订单表sql的解决方案的更多相关文章
- 面试必须要知道的SQL语法,语句
面试必须要知道的SQL语法,语句 收藏 asc 按升序排列desc 按降序排列下列语句部分是Mssql语句,不可以在access中使用.SQL分类: DDL—数据定义语言(Create,Alter,D ...
- 在ABP中通过EF直接执行原生Sql的解决方案
一般情况下,使用EF中的查询语法和方法语法可以帮助我们完成绝大部分业务,但是也有特殊的情况需要直接执行Sql语句.比如,我们的业务过于复杂繁琐,或是有些业务使用EF操作时比较复杂,但是使用Sql时会很 ...
- 城市经纬度 json 理解SignalR Main(string[] args)之args传递的几种方式 串口编程之端口 多线程详细介绍 递归一个List<T>,可自己根据需要改造为通用型。 Sql 优化解决方案
城市经纬度 json https://www.cnblogs.com/innershare/p/10723968.html 理解SignalR ASP .NET SignalR 是一个ASP .NET ...
- MapReduce案例:统计共同好友+订单表多表合并+求每个订单中最贵的商品
案例三: 统计共同好友 任务需求: 如下的文本, A:B,C,D,F,E,OB:A,C,E,KC:F,A,D,ID:A,E,F,LE:B,C,D,M,LF:A,B,C,D,E,O,MG:A,C,D,E ...
- php面试专题---MySQL分表
php面试专题---MySQL分表 一.总结 一句话总结: 分库分表要数据达到一定的量级才用,这样才有效率,不然利不一定大于弊,可能会增加一次I/O消耗 1.分库分表的使用量级是多少? 单表行数超过 ...
- ***电商数据库设计参考:ecshop数据库+订单表结构等
ecshop订单表结构ecs_order_info说明 -- 表的结构 `ecs_order_info` CREATE TABLE IF NOT EXISTS `ecs_order_info` ...
- XMLHttpRequest的POST中文表单问题解决方案
XMLHttpRequest的POST中文表单问题解决方案 由于XMLHttpRequest POST的内容是用UTF-8编码,所以在服务端要先把request的编码改为UTF-8. 而且客户端pos ...
- php大力力 [023节]CREATE TABLE创建新表sql写字段备注(2015-08-27)
2015-08-27 php大力力023.CREATE TABLE创建新表sql写字段备注 http://www.cnblogs.com/dalitongxue/p/4762182.html 参考: ...
- powerdesigner中将表的name在生成建表sql时生成注释
1.为powerdesigner的表设置注释方法: powerdesigner默认没有注释: 设置方法: 选择那个表 右键- >Properties- >Columns- >Cust ...
随机推荐
- BZOJ1923:[SDOI2010]外星千足虫(高斯消元)
Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果.每行 包含一个“01”串和一个数字,用一个空格隔开.“01 ...
- 简单说一说对JavaScript原型链的理解
每一个JavaScript对象都和另一个对象相关联,相关联的这个对象就是我们所说的“原型”.每一个对象都会从原型继承属性和方法.有一个特殊的对象没有原型,就是Object,还有一种通过Object.c ...
- [转] 有关java中两个整数的交换问题
转载申明:本文主要是用于自己学习使用,为了完善自己的只是框架,没有任何的商业目的. 原文来源:有关Java中两个整数的交换问题 如果侵权,麻烦告之,立刻删除. 在程序开发的过程,要交换两个变量的内容, ...
- AD9516锁相环功能外接环路滤波器的设计与分析
- Java使用正则解决问题
分析以下需求,并用代码实现 (根据描述写匹配手机号和邮箱的正则表达式) 1.根据描述写出正则表达式 (1)手机号正则: 第一位为1 第二位为3或4或5或7或8 第三~十一位为0~9的其中一个数字 (2 ...
- DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果
DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果 liuyuhang原创,未经允许禁止转载 系列目录连接 DB数据源之SpringBoot+Mybatis踏坑过程实 ...
- android软件开发基础
1.android特性:开放性:开源的一个基础, 方便性: 平等性: 2.Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,Broadc ...
- 为什么有时候binlog文件会很大于max_binlog_size以及max_binlog_cache_size
问题描述 线上一个很有意思的现象,发现binlog文件大小是15G,查看了参数max_binlog_size是1073741824[1G], max_binlog_cache_size是2147483 ...
- IO,File对象-构造函数和常用方法
import java.io.File; import java.text.DateFormat; import java.util.Date; public class FileDemo { pub ...
- vue2.0 接收url参数
1) 路由配置传参方式在配置路由时 例如 "/firewall/authorize/:uid/:uname/:token"页面url为 http://XXX.com/firewal ...