sql tally投票并返回获胜者

时间:2011-08-28 00:45:34

标签: sql

目标是返回具有最多星星(投票)的图像。如果有一个平局,它会被dateTime标记打破;获得最多选票的第一张图片。有3列,imageName,stars,dateTime。为了填充该表,用户使用5星评级系统投票。每个图像可以有1到5颗星,以及多种组合。该语句需要将与每个唯一imageName关联的总星数相加,然后评估dateTime标记(如果存在平局)。这是我迷路的地方。可能有4次出现一个唯一的imageName,每个都有一个1星,总共5票。另一个imageName可以出现一次,并且具有4星级的单个评级。

样本表:

imagName ----- stars ----- DT
____________________________________________________
endeavourLiftOff.jpg ----- 1 ----- 2011-08-25 20:51:18
Image0016.jpg ------- ---- 1 ----- 2011-08-25 20:53:16
Image0016.jpg ------------ 3 ----- 2011-08-25 20:53:17
mantas_05-06.jpg --------- 4 ----- 2011-08-25 20:53:18
help.jpg ----------------- 3 ----- 2011-08-25 20:53:20
txHoldem.jpg ------------- 1 ----- 2011-08-25 20:53:21
Image0016.jpg  ----------- 1 ----- 2011-08-25 20:55:37

2 个答案:

答案 0 :(得分:2)

假设Microsoft SQL

select top 1 xx.imagName
FROM
(
select imagName,min(dt),sum(stars)
from yourTable
group by imagName
ORDER BY 3 DESC,2 
) xx

其他方言有第一次出现的其他方式

答案 1 :(得分:1)

您在评估时间戳时迷路了,因为您的要求不明确。

你想拍第一个时间戳,最后一个时间戳吗?最早的投票总决定是决胜局?

我打算假设你想在决胜局使用最早的投票。

SELECT 
  A.*
FROM
  ( SELECT 
     I.imagName, 
     SUM(I.stars) as StarVotes,
     MIN(I.DT) as TieBreaker -- "Earliest Vote Tiebreaker"
    FROM 
      MyTable as I 
    GROUP BY I.imagName ) as A
ORDER BY
  A.StarVotes DESC, 
  A.TieBreaker 

你也可以使用“平均时间戳”作为决胜局,或者使用“每颗星的平均时间戳”作为决胜局。

相关问题