簡體   English   中英

MySQL中的GROUP_CONCAT + SUM / COUNT不起作用

[英]GROUP_CONCAT + SUM / COUNT in mysql not working

我有一些桌子喜歡

User         : id , username
answers      : id , answers , is_correct , question_id
user_answers : user_id , question_id , answer_id , date
questions    : id , question , category
category     : id name

現在我想做的是計算用戶在每個類別上給出的正確答案。 我的查詢是這樣

SELECT
  u.`user_name` AS `UserName`,
  u.`user_id`   AS `UserId`,
  sum(a.is_correct) AS `Score`,
  group_concat(distinct c.name) AS `Quizes`
FROM users_answers ua
  LEFT JOIN answers a
    on a.id = ua.answer_id
  LEFT JOIN users u
    ON u.user_id = ua.user_id
  left join questions q
    on q.id = a.question_id
  left join categories c
    on c.id = q.cat_id
WHERE a.is_correct = 1
GROUP BY u.user_id
ORDER BY `Score` desc, ua.date desc;

它帶來了好的結果,但我需要分別獲得每個類別的總分。

編輯

select
  s.UserName,
  s.UserId,
  GROUP_CONCAT(Score) AS CategoryScores,
  sum(s.TotalScore) as TotalScore,
  s.Quizes,
  s.LastPlayed
from (select
        u.`user_name` AS `UserName`,
        u.`user_id`   AS `UserId`,
        sum(a.is_correct) AS `Score`,
        sum(a.is_correct) AS `TotalScore`,
        group_concat(distinct c.name) AS `Quizes`,
        ua.date       as `LastPlayed`,
        c.id          as CategoryId
      FROM users_answers ua
        LEFT JOIN answers a
          on a.id = ua.answer_id
        LEFT JOIN users u
          ON u.user_id = ua.user_id
        left join questions q
          on q.id = a.question_id
        left join categories c
          on c.id = q.cat_id
      WHERE a.is_correct = 1
      GROUP BY u.user_id, CategoryId) s
GROUP BY UserId
ORDER BY `TotalScore` desc, LastPlayed desc;

謝謝邁克爾,但是這里的問題是,現在我無法在concat組中獲取類別名稱。

嘗試這個

select
  UserName   as UserName,
  UserId,
  group_concat(Score) as Score,
  sum(TotalScore) as TotalScore,
  LastPlayed,
  group_concat(Quizes)    QuizNames
from (SELECT
        u.`user_name` AS `UserName`,
        u.`user_id`   AS `UserId`,
        count(ua.`id`) AS `Score`,
        count(ua.`id`) AS `TotalScore`,
        ua.date       as `LastPlayed`,
        group_concat(distinct c.name) as `Quizes`
      FROM users_answers ua
        LEFT JOIN answers a
          on a.id = ua.answer_id
        LEFT JOIN users u
          ON u.user_id = ua.user_id
        left join questions q
          on q.id = a.question_id
        left join categories c
          on c.id = q.cat_id
      WHERE a.is_correct = 1
      GROUP BY u.user_id desc,c.id
      ORDER BY `Score` desc, ua.date desc,u.user_id) sub
GROUP BY UserId desc
ORDER BY `TotalScore` desc, LastPlayed desc

c.id添加到您的SELECT列表中,然后添加GROUP BY 這將導致SUM(a.is_correct)跨類別ID分組。

SELECT
  u.`user_name` AS `UserName`,
  u.`user_id`   AS `UserId`,
  /* CategoryId into the SELECT list */
  c.id AS `CategoryId`,
  sum(a.is_correct) AS `Score`,
  group_concat(distinct c.name) AS `Quizes`
FROM users_answers ua
  LEFT JOIN answers a
    on a.id = ua.answer_id
  LEFT JOIN users u
    ON u.user_id = ua.user_id
  left join questions q
    on q.id = a.question_id
  left join categories c
    on c.id = q.cat_id
WHERE a.is_correct = 1
/* And add it to the GROUP BY */
GROUP BY 
  u.user_id,
  CategoryId
ORDER BY `Score` desc, ua.date desc, CategoryId;

更新資料

在注釋中闡明問題之后,將整個內容包裝在子查詢中,然后對總和調用GROUP_CONCAT()

SELECT
  subq.UserName,
  subq.UserId,
  GROUP_CONCAT(CONCAT(CategoryName, ': ', Score)) AS CategoryScores,
  Quizzes
FROM (
    SELECT
      u.`user_name` AS `UserName`,
      u.`user_id`   AS `UserId`,
      /* CategoryId into the SELECT list */
      c.id AS `CategoryId`,
      c.name AS `CategoryName`,
      sum(a.is_correct) AS `Score`,
      group_concat(distinct c.name) AS `Quizes`
    FROM users_answers ua
      LEFT JOIN answers a
        on a.id = ua.answer_id
      LEFT JOIN users u
        ON u.user_id = ua.user_id
      left join questions q
        on q.id = a.question_id
      left join categories c
        on c.id = q.cat_id
    WHERE a.is_correct = 1
    /* And add it to the GROUP BY */
    GROUP BY 
      u.user_id,
      CategoryId,
      CategoryName
) subq
GROUP BY UserId
ORDER BY `Score` desc, ua.date desc;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM