2 u010665380 u010665380 于 2015.05.26 09:35 提问

求大神给个思路!
 现在有一个店铺表关联一个评论表,一对多的关系,评论表里有个价格字段,现在需求是要根据查询店铺的信息同时根据评论表价格的平均价格排序还要分页,并且如果价格为0,算平均价格时不需要算上这列,求大神给思路

4个回答

Tiger_Zhao
Tiger_Zhao   Rxr 2015.05.26 09:41
已采纳

下面是已排序的全集,按照你用的数据库语法去分页。

        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
u010665380
u010665380 谢谢大神我知道怎么写了,非常感谢你,感谢你,小弟真是不盛感激
2 年多之前 回复
danielinbiti
danielinbiti   Ds   Rxr 2015.05.26 09:41

个人觉得应该冗余记录这个平均价格,在评论生成的时候自动计算平均价格到店铺表的平均价格冗余字段里,这种业务也没必要实时,只要相对实时就行了。
如果靠分页的时候现计算能实现,但SQL过于复杂,降低效率。

u010665380
u010665380 非常感谢你,只有跟带我的上司讨论了,需求是产品那边定的,原来本来是关联另外一张表的,现在那张表废弃了,又换了张表,所有代码都要改,蛋疼。非常感谢你回答我的问题
2 年多之前 回复
u010665380
u010665380 非常感谢你,只有跟带我的上司讨论了,需求是产品那边定的,原来本来是关联另外一张表的,现在那张表废弃了,又换了张表,所有代码都要改,蛋疼。非常感谢你回答我的问题
2 年多之前 回复
pq430
pq430   2015.05.26 10:06

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

redy_bai
redy_bai   2015.05.26 11:49

如果做冗余,最好冗余 总价格和有效评论数俩字段

Csdn user default icon
上传中...
上传图片
插入图片