在 SQL 中创建名称列
Posted
技术标签:
【中文标题】在 SQL 中创建名称列【英文标题】:Make name column in SQL 【发布时间】:2019-08-06 10:46:52 【问题描述】:我正在寻找一种在 SQL 中将行转换为列的有效方法。列的名称可以取决于行的变化吗?这是我的例子:
名表电影和访客
Id | film
0 | comedy
1 | horror
2 | drama
Id | visitors
0 | 3
1 | 10
2 | 4
0 | 8
1 | 5
2 | 1
我必须当前喜剧、戏剧、恐怖的总和,其中列名反映了当前使用的电影类别。我不知道怎么写。。你能写这个吗?请
【问题讨论】:
同时指定预期结果。并向我们展示您当前的查询尝试。 这两个答案做出了不同的事情,因为不太清楚您的期望。请澄清并添加一些预期的输出 【参考方案1】:我很确定你只想要 join
和 group by
:
select f.film, sum(v.visitors)
from visitors v left join
film f
on v.id = f.id
group by f.film;
如果这是您想要的,这是一个基本的 SQL 查询。 JOIN
是一个基本概念,您应该花一些时间学习 SQL。有许多书籍、教程、视频和其他资源可用于此目的。
【讨论】:
有趣,不同的解释 :) 在我看来,“将行转换为列”这句话触发了枢轴。但也许你是对的,这是基本的。也许 TO 增加了预期的输出......【参考方案2】:对于静态 3 类:
demo:db<>fiddle
SELECT
SUM(visitors) FILTER (WHERE id = 0) AS comedy,
SUM(visitors) FILTER (WHERE id = 1) AS horror,
SUM(visitors) FILTER (WHERE id = 2) AS drama
FROM films
【讨论】:
如何更改脚本以使列的名称取决于电影类别的名称?例如,当有人为颤音器更改喜剧时,我将不得不手动更正列的名称。我怎么能不手动呢? @Nemezis 首先请告诉我们这是否是您在原则上所期望的结果? 是的,我正在寻找它。谢谢! @Nemezis 不幸的是,这在 Postgres 中并不是那么简单。但是你可以看看这个问题正在讨论的问题:***.com/questions/2099198/…以上是关于在 SQL 中创建名称列的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 2008 中创建具有新名称的重复表
如何在 BigQuery SQL 中安全地参数化表/列名称?