【问题标题】:Creating views with group by not grouping properly通过不正确分组创建带有组的视图
【发布时间】:2016-04-02 17:57:03
【问题描述】:

我的 Event_type 列中有类似于 Music92838、Entertainment298928、SPORTS2837 等的数据,我正在尝试创建一个按 event_type 对表演次数进行分组的视图

我试过了

CREATE VIEW Performances_Type_Cnt
 AS SELECT regexp_replace(E.event_type, '[^a-zA-Z]', '', 'g') AS Event_Type,
  COUNT(*)
 FROM Event_Type E, Performance P
WHERE E.event_id = P.event_id 
GROUP BY Event_Type;

使用正则表达式仅选择字符,然后在 Group By Event_type 中按 Music、Sports 等进行分组。但是有些东西不像我得到的结果那样起作用

  event_type   | count
---------------+-------
 MUSIC         |     1
 SPORTS        |     5
 MUSIC         |     8
 MUSIC         |     3

Music 在 event_type 中多次出现,这不是正确的结果。

感谢您的任何帮助!

【问题讨论】:

  • 不是 postgresql 专家,但我会尝试将别名“Event_Type”更改为不同的东西,也许 psql 内部的某些东西会变得混乱,因为列名和别名只是以防万一...

标签: sql postgresql group-by views psql


【解决方案1】:

“问题”是 Postgres 允许在 GROUP BY 中使用列别名。因此,对于 EVENT_TYPE 是来自表还是别名感到困惑。一种简单的解决方案是使用位置符号:

CREATE VIEW Performances_Type_Cnt AS
    SELECT regexp_replace(E.event_type, '[^a-zA-Z]', '', 'g') AS Event_Type,
           COUNT(*) as cnt
    FROM Event_Type E JOIN
         Performance P
         ON E.event_id = P.event_id 
    GROUP BY 1;

我做了一些其他的改变:

  • 用显式JOIN 替换了隐式连接。这是在 SQL 中编写连接的标准方法。
  • COUNT(*) 添加了列别名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 2022-01-17
    • 2017-08-01
    • 2020-08-28
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    相关资源
    最近更新 更多