问题描述
- 求大神给个思路!
-
现在有一个店铺表关联一个评论表,一对多的关系,评论表里有个价格字段,现在需求是要根据查询店铺的信息同时根据评论表价格的平均价格排序还要分页,并且如果价格为0,算平均价格时不需要算上这列,求大神给思路
解决方案
下面是已排序的全集,按照你用的数据库语法去分页。
SELECT a.* b.平均价格 FROM 店铺表 LEFT JOIN ( SELECT 店铺ID AVG(价格) 平均价格 FROM 评论表 WHERE 价格 <> 0 GROUP BY 店铺ID ) b ON a.店铺ID = b.店铺ID ORDER BY b.平均价格 DESC
解决方案二:
个人觉得应该冗余记录这个平均价格,在评论生成的时候自动计算平均价格到店铺表的平均价格冗余字段里,这种业务也没必要实时,只要相对实时就行了。
如果靠分页的时候现计算能实现,但SQL过于复杂,降低效率。
解决方案三:
D//店铺 dIddName
P//评论 dIdsalePrice
delare @pageSize int;//每页个数
delare @pageNum int;//页数
select top (@pageSize * pageNum) d.dNameavg(p.salePrice) From P join D on p.dId=d.dId
Group by d.dName order by avg(p.salePrice) asc
having avg(p.salePrice)>0
解决方案四:
如果做冗余,最好冗余 总价格和有效评论数俩字段
时间: 2024-08-03 09:23:24