sql - 通过不正确分组来创建带有组的 View

标签 sql postgresql group-by view psql

我的 Event_type 列中有看起来像 Music92838、Entertainment298928、SPORTS2837 等的数据,我正在尝试创建一个 View ,按 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 中多次出现,这不是正确的结果。

感谢所有帮助!

最佳答案

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

关于sql - 通过不正确分组来创建带有组的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36376883/

相关文章:

python - 独特页面的数据框摘要

MySQL 在一条语句中选择和更新

mysql - 使用 SELECT/JOIN 触发插入

sql - 如果存在则更新行的存储过程

database - 从文本文件复制时,PostgreSQL 可以将超出范围的值设置为 null 吗?

sql-server - postgres_fdw 错误无法连接服务器

sql - 当 WHERE 子句保证奇异值时,聚合函数具有唯一性

mongodb - MapReduce 和 SQL GROUP BY

sql - 按日期分组多个表

sql - 在 PostgreSQL 9.6 中,扩展填充有简单 JSON 字典的 JSONB 列的最简单方法是什么?