通过不正确分组来创建带有组的视图
Creating views with group by not grouping properly
我的 Event_type 列中有看起来像 Music92838、Entertainment298928、SPORTS2837 等的数据,我正在尝试创建一个视图,按 event_type[= 对表演次数进行分组12=]
我试过了
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;
仅对 select 个字符使用正则表达式,然后在分组依据 Event_type 中按音乐、体育等分组。但是有些东西不起作用,因为我得到的结果是
event_type | count
---------------+-------
MUSIC | 1
SPORTS | 5
MUSIC | 8
MUSIC | 3
音乐在 event_type 中出现不止一次,结果不正确。
感谢任何帮助!
"problem"是Postgres允许在GROUP BY
中使用列别名。因此,混淆了 EVENT_TYPE
是来自 table 还是别名。一种简单的解决方案是使用位置表示法:
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(*)
添加了列别名。
我的 Event_type 列中有看起来像 Music92838、Entertainment298928、SPORTS2837 等的数据,我正在尝试创建一个视图,按 event_type[= 对表演次数进行分组12=]
我试过了
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;
仅对 select 个字符使用正则表达式,然后在分组依据 Event_type 中按音乐、体育等分组。但是有些东西不起作用,因为我得到的结果是
event_type | count
---------------+-------
MUSIC | 1
SPORTS | 5
MUSIC | 8
MUSIC | 3
音乐在 event_type 中出现不止一次,结果不正确。
感谢任何帮助!
"problem"是Postgres允许在GROUP BY
中使用列别名。因此,混淆了 EVENT_TYPE
是来自 table 还是别名。一种简单的解决方案是使用位置表示法:
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(*)
添加了列别名。