【问题标题】:Make name column in SQL在 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

我必须当前喜剧、戏剧、恐怖的总和,其中列名反映了当前使用的电影类别。我不知道怎么写。。你能写这个吗?请

【问题讨论】:

  • 同时指定预期结果。并向我们​​展示您当前的查询尝试。
  • 这两个答案做出了不同的事情,因为不太清楚您的期望。请澄清并添加一些预期的输出

标签: sql postgresql pivot


【解决方案1】:

我很确定你只想要 joingroup 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 中并不是那么简单。但是你可以看看这个问题正在讨论的问题:stackoverflow.com/questions/2099198/…
猜你喜欢
  • 1970-01-01
  • 2022-11-15
  • 2022-08-14
  • 2019-10-03
  • 2017-06-11
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 2020-08-27
相关资源
最近更新 更多