SQL | 选择行作为列

huangapple go评论68阅读模式
英文:

SQL | Select rows as columns

问题

我有一个如下的表结构:

学生ID 科目 成绩
1 数学 10
1 物理 30
2 数学 25

我想以以下格式选择数值:

学生ID 数学 物理
1 10 30
2 25

请问如何在SQL中完成这个任务?我正在使用PostgreSQL。

或者我是否需要在Java中完成,因为那是我们的中间件?

谢谢。

英文:

I have a table schema as below:

Student ID Subject Marks
1 Maths 10
1 Physics 30
2 Maths 25

I want to select the values in below format:

Student ID Maths Physics
1 10 30
2 25

Could you please suggest how this can be accomplished in SQL? I'm using Postgresql.

Or I'll have to do it in Java as that is our middleware?

Thank you.

答案1

得分: 1

你可以使用属于 tablefunc 模块的 crosstab 函数。
首先,下载该模块。

之后,你可以使用以下查询(必要的插入可以在这里找到):

SELECT *
FROM crosstab(
    'select student_id, subject, mark::text 
     from student_marks
     order by student_id ASC, mark ASC'
) AS ct(entity_id integer, "Math" text, "Physics" text);

在这里,crosstab 接收一个参数,即 SQL 查询作为文本,并将查询的结果转置为这些列:entity_idMathPhysics

你可以在这里了解更多关于 crosstab 的信息:onetwo

英文:

You can use crosstab function which belongs to the tablefunc module.
First, download the module.

After you can use this query (necessary inserts can be found here):

SELECT *
FROM crosstab(
    'select student_id, subject, mark::text 
	 from student_marks
	 order by student_id ASC, mark ASC'
) AS ct(entity_id integer, "Math" text, "Physics" text);

Here crosstab receives 1 argument, a SQL query as a text, and transposes the query's result into these columns: entity_id, Math and Physics.

You can find out more about the crosstab here: one, two.

huangapple
  • 本文由 发表于 2023年6月5日 20:29:47
  • 转载请务必保留本文链接:https://go.coder-hub.com/76406425.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定