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

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

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

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

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

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

8153 次点击
所在节点    程序员
52 条回复
msg7086
2017-12-11 01:00:13 +08:00
说句实话,这样的业务逻辑放在存储上的意义是什么。
放在以前,SQL 功能强大,编程语言相对复杂难用,而且程序和数据库之间传输数据开销很大的时候,全程 SQL 求值我可以理解。现在数据传输走 Unix Socket,编程语言也简单很多,业务逻辑放在程序里处理的同时还可以根据业务充分缓存数据提高性能,更不提 Web Server 可以分布式而数据库为了 ACID 通常只能小量部署。这种情况下还去写长长的 SQL 只会限制性能。别人家不知道,至少在我司,这样的「 SQL 水平」是不需要的,这样复杂的 SQL 语句也是禁止的。
Theta
2017-12-11 01:09:25 +08:00
似李,学长!有缘 internet 见啊,听说你要难倒英雄我😳
ioth
2017-12-11 09:25:22 +08:00
现在在一起了吧?
realpg
2017-12-11 09:36:36 +08:00
性能大坑……
这就是我不爱要写 java 企业程序的码农的原因之一
曾经面试一个 java 企业开发要转 php 互联网开发,我给出了个小面试题,大致就是给定的库结构跟想要的结果无法直接用简单查询得到,需要用点小技巧才能有效利用索引……

然后面试的折腾了 20 分钟,牛逼哄哄的交卷给我看,写了一个 4KB 文本的单一 SQL 查询! 4KB 文本!嵌套 10+层子查询,交卷时候觉得自己老牛逼了……
Chrics
2017-12-11 10:14:13 +08:00
说真的,这种可以用业务逻辑实现的代码,强行一句 SQL 无意义好吧
openbsd
2017-12-11 10:41:12 +08:00
外行不懂,求大神解惑
在单表数据比较大的时候(比如行数过亿)
用 SQL 实现和用程序实现,性能有差距吗 ?
noNOno
2017-12-11 10:45:56 +08:00
@swulling 每日计算当日的订单总额,存入宽表.计算总量从宽表计算
noNOno
2017-12-11 10:46:48 +08:00
@msg7086 离线处理,供分析使用
noNOno
2017-12-11 10:50:17 +08:00
@realpg 数仓题...
yuriko
2017-12-11 11:51:37 +08:00
@noNOno
复杂?我看了三遍也没觉得我理解错了啊……
jitongxi
2017-12-11 12:12:01 +08:00
一个存储过程, 里面多写点 sql, 就解决了吧. 写银行业务的, 这些是拿手小菜.
qiukun
2017-12-11 12:13:41 +08:00
@realpg 求题目

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

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

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

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

© 2021 V2EX