通过不正确分组来创建组视图

时间:2016-04-02 17:57:04

标签: sql postgresql group-by views psql

我的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;

使用正则表达式仅选择字符,然后按分组按事件类型按音乐,体育等分组。但有些东西不能像我的结果那样工作

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

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

任何和所有帮助表示赞赏!

1 个答案:

答案 0 :(得分:3)

“问题”是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(*)添加了列别名。