现在有一个店铺表关联一个评论表,一对多的关系,评论表里有个价格字段,现在需求是要根据查询店铺的信息同时根据评论表价格的平均价格排序还要分页,并且如果价格为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//店铺 dId,dName
P//评论 dId,salePrice
delare @pageSize int;//每页个数
delare @pageNum int;//页数
select top (@pageSize * pageNum) d.dName,avg(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
如果做冗余,最好冗余 总价格和有效评论数俩字段