1

これは非常にばかげた間違いかもしれませんが、私はそれを修正することはできません。QuestionsQuestions_Ratingの2つのテーブルがあります。

質問

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の合計を取得します。これには。が含まれます。ratequestions_ratingID = 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句のいずれにも含まれていないため、選択リストでは無効です。

レートのが1行を返すことはわかっていますSUMが、質問はおそらく1行であるため、このクエリの何が問題になっているのかわかりません。

SQLServer2008を使用しています。

4

4 に答える 4

4

質問に従って値をグループ化する必要があるため、

GROUP BY q.question

クエリの最後に

ここで良い説明

于 2012-12-28T09:54:12.740 に答える
2

group byselectステートメントに句 がありません。だから、すべての選択列 に書き込む必要がある関数を
使用したので。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";
于 2012-12-28T09:51:12.553 に答える
2

group by q.questionSQLステートメントにが必要です。

Sumと一緒に列を選択しているので、選択した列のグループを指定する必要があるため、Sumはテーブルに対して単一の行のみを返すと想定されています。あなたの場合はそうあるべきでありq.question、合計は質問の各グループに適用されます。

于 2012-12-28T09:52:44.100 に答える
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

または(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 
于 2012-12-28T09:55:04.403 に答える