php处理mysql关联查询的数据_mysql关联查询并得到某条数据的排名。

该博客讨论如何通过SQL查询获取特定店铺在所有店铺中的销售额排名,提出了两种方法:一是利用子查询找出目标店铺销售额并对比所有店铺;二是使用用户变量实现排名。建议在数据库中增加销售总额字段以提高效率,同时提到了定期更新排名的解决方案。
摘要由CSDN通过智能技术生成

现在有一个订单表,表中有一字段shop_id(店铺id),还有一个shop表(店铺表),现在我想得到某个店铺所有订单总额在所有店铺里面的排名,这个sql语句该怎么写呢?或者说有什么简单的办法去实现呢?

ps:店铺表中没有销售总额字段,我现在是先将所有店铺的销售额进行排序,但是如果去遍历数组比较某个店铺的销售额的排名实在是太麻烦了

回复内容:

现在有一个订单表,表中有一字段shop_id(店铺id),还有一个shop表(店铺表),现在我想得到某个店铺所有订单总额在所有店铺里面的排名,这个sql语句该怎么写呢?或者说有什么简单的办法去实现呢?

ps:店铺表中没有销售总额字段,我现在是先将所有店铺的销售额进行排序,但是如果去遍历数组比较某个店铺的销售额的排名实在是太麻烦了

SELECT a.id,a.shopname,sum(b.order_price) FROM tb_shop a LEFT JOIN tb_item_order b on a.id=b.shop_id GROUP BY a.id ORDER BY sum(b.order_price) desc

亲测,可以实现题主的需求

麻烦的很,最佳办法就是表里增加销售总额字段,不然的话每次要排名就要统计一次,数据库肯定挂。这种应用肯定是你进店铺的时候显示一个排名信息,N个人进不同的店铺,你要统计N次每个店铺的销售总额吗?

正解是增加销售总额和排名字段,使用定时任务每天更新一次。

SELECT a.id, sum(b.price) as total_price FROM shop a, order b

WHERE a.id = b.shop_id

GROUP BY a.id

ORDER BY total_price desc

简单想了下,两个思路

一是先算出这个店铺的销售额是多少,然后去所有店铺销售额的结果集中找大于这个值的count数

二是引入预定义用户变量来实现,set @mycnt = 0; select (@mycnt := @mycnt + 1) as ROWNUM

另外如果这个总排名很常用的话,还是建议建立一个总额的字段

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值