1

プレイヤーが質問できるシステムに取り組んでいます。各プレイヤーは、異なるゲームと言語に割り当てられます。彼らはまた、これに対してボーナスポイントを獲得します.

質問された質問の数、まだアクティブな質問の数、クローズされた質問の数、および与えられたボーナスの合計額に関する統計を示すレポートが必要です。レポートは、ゲームと質問の種類ごとです。

以下のクエリは正常に機能していますが、重複したプレーヤーを削除する必要があるため、プレーヤーごとに 1 つの質問 (最後に尋ねた質問) のみがカウントされます。

SELECT 
q.game, 
q.language, 
q.questionType, 
COUNT(q.player) AS total, 
SUM(IF(q.status = 'Active', 1, 0)) AS active, 
SUM(IF(q.status = 'Closed', 1, 0)) AS closed, 
SUM(q.points) AS points
FROM questions AS q
LEFT JOIN players AS p ON p.id = q.asked_by 
LEFT JOIN games AS g ON g.id = p.game 
GROUP BY q.game, q.questionType
4

2 に答える 2

0

まず、ゲーム テーブルまたはプレーヤー テーブルのデータを使用していないため、それらを結合する必要はありません。

SELECT 
    q.game, 
    q.language, 
    q.questionType, 
    COUNT(q.player) AS total, 
    SUM(IF(q.status = 'Active', 1, 0)) AS active, 
    SUM(IF(q.status = 'Closed', 1, 0)) AS closed, 
    SUM(q.points) AS points
FROM questions AS q
WHERE id IN (SELECT MAX(id) FROM questions GROUP BY player)
GROUP BY q.game, q.questionType

私がやっていることは、プレーヤーごとに最後の固有の質問を選択し、それに対してクエリを実行することです。あなたは持っておらq.languageGROUP BY、それは集約関数ではありません。そうすることはお勧めしません。グループにも言語を含めることをお勧めします。

于 2013-05-29T12:48:30.043 に答える