评价排行算法为:非常好5分,好3分,一般1分,评价排行根据资讯评价分数相加综合得分高低进行排行。一条记录有三种评价,一个非常好5分,一个好3分,一个一般1分,按所得的三个分数的总和进行排序,现在sql不会写。按照sql统计出来的结果由高到低排序请教各位大哥大姐。

解决方案 »

  1.   

    select case when 评价1 = '非常好' then 5
                when 评价1 = '好' then 3
                when 评价1 = '一般' then 1
           end +
           case when 评价2 = '非常好' then 5
                when 评价2 = '好' then 3
                when 评价2 = '一般' then 1
           end +
           case when 评价3 = '非常好' then 5
                when 评价3 = '好' then 3
                when 评价3 = '一般' then 1
           end 总和 , *
    from tb order by 总和 desc
      

  2.   

    包装一下
    select (sum(case when 评价1 = '非常好' then 5
                when 评价1 = '好' then 3
                when 评价1 = '一般' then 1
           end) +
           sum(case when 评价2 = '非常好' then 5
                when 评价2 = '好' then 3
                when 评价2 = '一般' then 1
           end) +
           sum(case when 评价3 = '非常好' then 5
                when 评价3 = '好' then 3
                when 评价3 = '一般' then 1
           end)) as 总和 , *
    from tb order by 总和 desc
    这样?建议LZ把表结构贴出来发帖注意事项http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
      

  3.   

    其中voteItem有且只有三种:非常好、好、一般,分别为5,3,1分。voteNum字段为该评价的次数,id为外键,一对多引用report表的id。一条记录会在评价表中产生三条关于该记录的评价,分别为非常好、好、一般。
      

  4.   

    try
    select 
      id,
      sum(voteNum*(case 
                     when voteItem='非常好' then 5 
                     when voteItem='好' then 3
                     when voteItem='一般' then 1
                   end)
          ) as  总分
    from
      tb
    group by id
      

  5.   

    select 
      id,
      sum(voteNum*(case 
                     when voteItem='非常好' then 5 
                     when voteItem='好' then 3
                     when voteItem='一般' then 1
                   end)
          ) as  总分
    from
      tb
    group by id
    order by 2 desc --由高到低排序