【问题标题】:Group rows with the same type from same table对同一表中相同类型的行进行分组
【发布时间】:2022-12-18 18:23:58
【问题描述】:

我有 3 个表 questionsanswersquestions_answers

问题:

id | question | type_id
1  | Q1       | 1
2  | Q2       | 3
3  | Q3       | 1
4  | Q4       | 2

答案:

id | answer 
1  | A1
2  | A2
3  | A3

问题和答案:

id | question_id | answer_id
1  | 1           | 1
2  | 2           | 3
3  | 3           | 1

我想获取所有问题并使用 type_id 对它们进行分组。

此查询对所有问题进行分组,但不知道哪个问题属于哪种类型:

SELECT GROUP_CONCAT(q.question, a.answer) FROM questions q
JOIN questions_answers qa ON qa.question_id = q.id
JOIN answers a ON qa.answer_id = a.id
GROUP BY q.id

是否可以按类型过滤问题而无需多次连接到 questions 表?

输出是我可以通过type_id过滤得到每个问题的东西,即:

question | answer
Q1       | A1
Q3       | A1

这是给type_id = 1 的。我可以像那样通过type_id 过滤所有这些吗?所以我可以知道 whci 问题属于哪个type_id

【问题讨论】:

  • 发布示例数据和预期结果以阐明您想要什么。
  • 您要按type_id 过滤它们还是按type_id 对它们进行分组?这不是一回事,你在问题中都说了。
  • 你可以使用GROUP BY q.id, q.type_id
  • 我更新了描述希望它能解释我所寻求的
  • 我想获得按 type_id 分组的问题和答案,这样我就可以在一个部分中显示 type_id =1 的问题,然后在另一个部分中仅显示 type_id = 1 的问题

标签: mysql sql


【解决方案1】:

您将需要使用 join 否则您将得到一个问题而没有答案。下面的查询显示了这个,选择了 Questions where thetype_id 为 1

SELECT 
    q.question 
FROM 
    questions q
WHERE
    q.type_id = 1

但是,您仍然可以将 WHERE 子句添加到当前语句中,这将过滤数据。下面的示例将再次获得所有问答type_id 为 1

SELECT 
    GROUP_CONCAT(q.question, a.answer) 
FROM 
    questions q
    JOIN questions_answers qa 
        ON qa.question_id = q.id
    JOIN answers a 
        ON qa.answer_id = a.id
WHERE
    q.type_id = 1
GROUP BY 
    q.id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2022-10-02
    • 2020-08-23
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多