>백엔드 개발 >PHP 튜토리얼 >mysql关联查询并得到某条数据的排名。

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

WBOY
WBOY원래의
2016-06-06 20:07:031143검색

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

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

回复内容:

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

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

<code>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</code>

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

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

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

<code class="sql">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</code>

简单想了下,两个思路
一是先算出这个店铺的销售额是多少,然后去所有店铺销售额的结果集中找大于这个值的count数
二是引入预定义用户变量来实现,set @mycnt = 0; select (@mycnt := @mycnt + 1) as ROWNUM
另外如果这个总排名很常用的话,还是建议建立一个总额的字段

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.