昨晚为了让学弟认识到自己的 sql 水平,出题为难了他

2017-12-10 14:44:03 +08:00
 noNOno

--.结果我自己没有想出来好的写法 数据库 mysql

订单表有 3 列
|城市|商品|订单金额|

1.求每个城市[销量]前三的商品

在 mysql 查询,可以一个 sql 做到么

7924 次点击
所在节点    程序员
52 条回复
banixc
2017-12-10 14:49:01 +08:00
noNOno
2017-12-10 14:51:46 +08:00
本来准备了后面几问..严重超纲
2.求每个城市销量前 30%的商品
3.增加时间维度,如何预计算指标计算每周 /每月销量前 30%的商品
noNOno
2017-12-10 14:53:21 +08:00
@banixc 订单表是销售额,需要先聚合求销量...在想有没有更好的办法
banixc
2017-12-10 14:54:58 +08:00
@noNOno 一个 SQL 可以做到很多事情,只要不限制使用子查询就可以。
function007
2017-12-10 14:55:04 +08:00
然后楼主成功认识到了自己的 sql 水平 😂
tinyuu
2017-12-10 14:55:06 +08:00
一个 sql 什么意思,不能用关联和子查询?
noNOno
2017-12-10 14:55:50 +08:00
@function007 对-.-
zhy0216
2017-12-10 14:57:13 +08:00
select city, product_number, rank() over (partition by city order by desc (product_number * money)) as amount_rank
from sale where amount_rank <= 3;
noNOno
2017-12-10 15:03:06 +08:00
@zhy0216 mysql 没有行号函数.
noNOno
2017-12-10 15:04:56 +08:00
@banixc 其实我发帖是想求教下优化方法..请看 2 楼,有什么常用的优化办法么...
GGGG430
2017-12-10 15:08:50 +08:00
我觉得应该冗余一张表,专门记录这种排名之类的结果,用一个定时任务(如每十分钟)来维护
noNOno
2017-12-10 15:13:52 +08:00
@GGGG430 是相当于,建立一个商品表,然后定期更新标签,[南京][top3] 这样么
noNOno
2017-12-10 15:19:12 +08:00
这问题的优化还是蛮有意思的吧,+_+...好奇有好办法么,尤其是大数据量的时候
GGGG430
2017-12-10 15:20:22 +08:00
是的, 定时任务查从表, 呵呵, 发现好像我答偏了, 楼主好像问 sql 优化方法
noNOno
2017-12-10 15:24:13 +08:00
@GGGG430 是的,其实是离线批处理的问题.现实中订单会发生更新,嘿嘿嘿,增量不好搞
fuyufjh
2017-12-10 15:25:49 +08:00
第一反应就是用定时任务做,然后把结果写到另一个表里。

哎,毕业一年半了……
billgreen1
2017-12-10 15:27:15 +08:00
@noNOno mariadb 有了 row_number,rank 之类的函数,mysql 也快有了
LxExExl
2017-12-10 15:28:33 +08:00
更加坚定了我以后需要写 sql 的时候就直接去找组里的 data engineer 别自己耗时间了……
noNOno
2017-12-10 15:29:06 +08:00
@billgreen1 哎..昨天想跟学弟炫耀下现写个 sql,结果 mysql 没 row_number,丢人丢到家....
mooncakejs
2017-12-10 15:32:12 +08:00
没有 window 方法干这个就是自己找事。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/413498

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX