首页 新闻 会员 周边

如何写高效sql

0
悬赏园豆:15 [待解决问题]

求教各位,下面这个sql怎么写效率较高啊,主要是订单表真的很大!!!!
用户表:users (user_id int)
订单表:order_tb(user_id int, or_time date, or_money double)
求以下用户:
一月下过单,二月份没有下过单的三月份下单用户
的如下指标:
三月份订单金额大于100的订单数,三月份第一笔订单和最后一笔订单的订单金额。(每个用户的哦)

hongma的主页 hongma | 初学一级 | 园豆:179
提问于:2017-09-29 17:00
< >
分享
所有回答(4)
1

我一直都在奇怪,为什么订单表很大的公司,会找一个不懂得写SQL的人或者公司做软件?!

爱编程的大叔 | 园豆:30839 (高人七级) | 2017-09-29 17:15

 万一没打算用关系数据库呢

支持(0) 反对(0) 花飘水流兮 | 园豆:13560 (专家六级) | 2017-09-29 17:50

亲爱的大叔,进入一个订单表很大的公司一直是我的梦想呢!这不在好好学sql嘛,这是我从别处看来的一个题。能够问这个问题的人应该不是一个完全不懂sql的人吧!不是写不出来,只是很好奇高手会怎么解决这个问题!寻求更好的解决方法有什么不对的呢?大叔这样子回答肯定是身怀绝技的吧?还请大叔露两手呢!指点指点

支持(0) 反对(0) hongma | 园豆:179 (初学一级) | 2017-09-29 17:54

@hongma: 订单小才写SQL,订单大就不写SQL了。

这种需求订单数越大,越不可能用SQL解决。

这种需求你能写出来的任何一句SQL都是低效的。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2017-09-30 09:16

@爱编程的大叔: 不知道在订单表很大的公司如果不用sql,那会是个什么流程处理这种需求的呢?还请大叔不吝赐教

支持(0) 反对(0) hongma | 园豆:179 (初学一级) | 2017-09-30 09:39

@hongma: 处理方式很多的

1、把提需求的产品经理祭天。

2、没法祭天,要求产品经理详细提供需求应用场景,使用频率,使用用户情况。

3、不要在你只有1万元的时候想象马云如何花钱,没有任何意义。你应该学习的是一万元的人如何花钱。

4、关于第二点,可以写3000到10000字详细分析。

5、然后才决定是否要开发这个需求。

 

最重要的一点,有的人把10万行订单数据,就叫数据量大,有的人把1000万行叫小数据量。

 

大、小这种出现在问题中,没有任何指导意义,这样提需求,就是只能扯淡的。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2017-09-30 09:59
0

这个是练手的吧?针对你的这个需求没有哪种写法效率会高(除非你1,2,3月下单用户量极小)

Daniel Cai | 园豆:10424 (专家六级) | 2017-09-29 18:16

嗯嗯是练手的呢!麻烦请教下:

select user_id
,first_value(ormoney) over(partition by user_id order by ortime) as first_or

,last_value(ormoney) over(partition by user_id order by ortime) as last_or
from order_tb
group by user_id

这个我想单纯求下用户最早和最晚订单的订单金额,老是报错not a GROUP BY expression。哪里有问题呢?要怎么写呢?

真心感谢!

支持(0) 反对(0) hongma | 园豆:179 (初学一级) | 2017-09-29 18:22

@hongma: 用了group  by前面要带你分组的参数名

支持(0) 反对(0) Drunk_fish | 园豆:178 (初学一级) | 2017-09-29 21:18

@Drunk_fish: 分组的参数是指user_id吗?我select里面有select user_id啊!还请说得更详细点

支持(0) 反对(0) hongma | 园豆:179 (初学一级) | 2017-09-29 22:11

@hongma: 你可以先吧下单的用户作为一个简单的视图,再去求一月份下单,二月份没下单,三月份下单的用户。

支持(1) 反对(0) Drunk_fish | 园豆:178 (初学一级) | 2017-09-30 08:43

@Drunk_fish: 对,我觉得就是这样的

支持(0) 反对(0) 爛轲 | 园豆:165 (初学一级) | 2017-09-30 15:16
0

为什么总是想在一个sql中处理,除非你是金融业务跑报表,可以几个小时几个小时的跑,这种需求一般是所有字段加索引,分表,然后拆分需求,单条sql查询之后再程序里面处理

[3] | 园豆:1174 (小虾三级) | 2017-09-29 22:43

再用group by来限制条件就行了   

支持(0) 反对(0) Drunk_fish | 园豆:178 (初学一级) | 2017-09-30 08:45
0

要按月份分组,在用having限制条件就行了

Drunk_fish | 园豆:178 (初学一级) | 2017-09-30 09:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册