2010-10-13 51 views
0

我试图执行以下查询如何在Q&使用MySQL查询

SELECT a.userid, COUNT(a.id) AS count_answers, SUM(v.yes_vote) as total_up_votes, SUM(v.all_vote - v.yes_vote) as total_down_votes, CAST(COUNT(a.id) + SUM(v.yes_vote) * 4 - SUM(v.all_vote) AS SIGNED) AS voting_points 
FROM (answers a) 
LEFT OUTER JOIN answers_vote_count v ON r.id = v.answer_id 
GROUP BY a.userid 
ORDER BY count_answers DESC 

正如你可以看到一个网站计算投票点的,我试图来计算回答收到的点接收。

点的计算一样 -

  • 1点每一个答案 - COUNT(答案)
  • 3点在回答每一个高达票 - 3 * SUM(yes_vote)
  • (-1)点每下降票 - SUM(all_vote) - SUM(yes_vote)

我的问题是 - 如果答案不具有up_vote和down_vote,点出来为NULL。 COUNT(答案)部分无法正常工作。

什么我做错了在这里?

Regards

回答

0

我知道了。由于我在投票时正在做LEFT JOIN,这就是为什么没有找到投票的答案变成NULL。这可以通过在SQL查询中使用CASE WHEN ELSE来解决 - 通过在总数为NULL时使用0来解决。

+1

使用'IFNULL'话,很方便;-) – zerkms 2010-10-13 05:41:56

+0

@zerkms - 谢谢。将使用该。 – vikmalhotra 2010-10-13 06:48:26

0

将预先计算得分值存储在问题表中。