2012-12-28 50 views
1

这可能是一个非常愚蠢的错误,但我无法修复它。我有两张桌子,问题问题_评分列在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中

问题

question_id question   user_id 
------------------------------------------ 
1    'How to blablabla'  1 
2    'bla bla bla'   1 

Questions_Rating

在这个表中,用户会率无论是+1或-1

question_rating_id question_id  user_id  rate 
------------------------------------------------------ 
1       1   2   (+1) 
2       1   3   (+1) 
3       1   4   (1) 

问题,现在我只是想从questions表中获取问题,以及的SUM在此问题的questions_rating表中,其中有一个ID = 1

String QUERY = "SELECT q.question, SUM(r.rate) FROM questions q, questions_rating r WHERE r.question_id = q.question_id AND q.question_id = 1"; 

这就是我所得到的。

列'questions.question'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

我知道,房价的SUM将返回1行,问题是所谓1行,我想不出有什么错此查询。

我使用SQL Server 2008的

+6

您没有'GROUP BY question' – V4Vendetta

回答

2

你缺少在SELECT语句group by条款。
因为您已经使用了sum()函数,所以函数aggregate function
因此,您需要为所有选择列编写group by

String QUERY = "SELECT 
        q.question, 
        SUM(r.rate) 
       FROM 
        questions q, 
        questions_rating r 
       where 
        r.question_id = q.question_id AND 
        q.question_id=1 
       group by 
        q.question"; 
2

在SQL语句中需要group by q.question

因为您选择了一个列以及总和,您需要在选定列上指定一个组,因此您的总和应该只返回表中的一行。在你的情况下,它应该是q.question,总和将适用于每组问题。

2
SELECT q.question,SUM(r.rate) AS RateSum 
FROM questions q,questions_rating r 
WHERE r.question_id = q.question_id AND q.question_id=1 
GROUP BY q.question 

结束需要一个

GROUP BY q.question 

或(使用ANSI 92风格加入)

SELECT q.question,SUM(r.rate) AS RateSum 
FROM questions q INNER JOIN questions_rating r ON r.question_id = q.question_id 
WHERE q.question_id=1 
GROUP BY q.question 

或(使用子查询)

SELECT q.question, (SELECT SUM(r.rate) FROM questions_rating r WHERE r.question_id = q.question_id) AS RateSum 
FROM questions q 
WHERE q.question_id=1 
相关问题