我的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中出现多次,这不是正确的结果。
任何和所有帮助表示赞赏!
答案 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(*)
添加了列别名。