mysql—一个复杂的sql查询要求,用于以不寻常的方式包含数据的表

pcww981p  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(293)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

10个月前关门了。
改进这个问题
从表中提取信息的情况有点复杂。我不知道什么是最好的方法。
我有两张table:学生信息
学生

id          name
--          --------
1           shredder
2           Queen

学生信息

student_id  property    value
----------  --------    -----
1           dept        CS
1           address     DE
1           class       X
2           dept        MS
2           address     DE
2           class       IX

跑步:

select * from student
join student_information si on student.id = si.student_id

给我这样的输出:

id          name        student_id  property    value
--          --------    ----------  --------    -----
1           shredder        1       dept        CS
1           shredder        1       address     DE
1           shredder        1       class       X
2           queen           2       dept        MS
2           queen           2       address     DE
2           queen           2       class       IX

select * from student
join student_information si on student.id = si.student_id
where property in ('dept','class')

我只需要为每个学生的部门和班级的信息,但目前属性类和部门列为行。我想把它做成专栏。
我们能这样做吗?

id          name        dept        class
--          --------    ----------  ------
1           shredder    cS          X       
1           queen       MS          IX
ntjbwcob

ntjbwcob1#

您可以连接两个表,然后按学生进行聚合,使用数据透视逻辑生成所需的属性:

SELECT
    s.id,
    s.name,
    MAX(CASE WHEN si.property = 'dept'  THEN si.value END) AS dept,
    MAX(CASE WHEN si.property = 'class' THEN si.value END) AS class
FROM student s
LEFT JOIN student_information si
    ON s.id = si.student_id
GROUP BY
    s.id,
    s.name;

演示

相关问题