下面是一个sql服务器表,用于保存用户对足球比赛的预测。用户可以预测主场胜利,客场胜利或特定足球比赛的平局/平局。SQL到LINQ简单查询?
我如何可以查询该表找到前3名的预测,前3场比赛必须是不同的游戏ID的
SQL或LINQ的解决方案将大大appriciated
alt text http://preview.robson-brown.com/capture.png
下面是一个sql服务器表,用于保存用户对足球比赛的预测。用户可以预测主场胜利,客场胜利或特定足球比赛的平局/平局。SQL到LINQ简单查询?
我如何可以查询该表找到前3名的预测,前3场比赛必须是不同的游戏ID的
SQL或LINQ的解决方案将大大appriciated
alt text http://preview.robson-brown.com/capture.png
我会假设你想要最强大的预测,即大多数人对结果达成一致的博弈。
var predictions = db.Predictions
.GroupBy(g => g.gameId)
.Select(g => new
{
gameId = g.Key,
homeWin = g.Sum(h => h.homeWin),
awayWin = g.Sum(a => a.awayWin),
draw = g.Sum(d => d.draw)
})
.Select(g => new
{
gameId = g.gameId,
prediction = g.homeWin > g.awayWin
? (g.homeWin > draw
? 'homeWin'
: 'draw')
: (g.awayWin > g.draw
? 'awayWin'
: 'draw'),
strength = g.homeWin > g.awayWin
? (g.homeWin > draw
? g.homeWin
: g.draw)
: (g.awayWin > g.draw
? g.awayWin
: g.draw)
})
.OrderByDescending(g => g.strength)
.Take(3);
您可能可以结合这两个选择,但IMO会损害代码的可读性。
谢谢你tvanfosson你回答了我错过了,是的,我想要最一致的预测,我会测试你的回答和报告回!谢谢 – 2010-07-24 13:49:57
感谢tvanfosson你的解决方案效果很好 – 2010-07-24 20:31:10
因此,给定您的示例数据,您希望您的示例输出是什么? – 2010-07-24 13:17:11
你如何排名预测? – 2010-07-24 13:18:09
对不起,是的输出!所有我想要的是gameId被输出 使用示例数据我们可以看到gameId 5都有5个主胜和5个客场胜预测,(在他的情况下,我会选择最高评级的球队成为最喜欢的,这是出这个问题的范围,我猜)因为我不希望gameId 5被返回两次, – 2010-07-24 13:39:02