postgresql基础

WHEREHAVING的基本区别:

  • WHERE在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算);
  • HAVING在分组和聚集之后选取分组行。
  • 因此,WHERE子句不能包含聚集函数(可以在子查询用聚集); 因为试图用聚集函数判断哪些行应输入给聚集运算是没有意义的。相反,HAVING子句总是包含聚集函数(严格说来,你可以写不使用聚集的HAVING子句, 但这样做很少有用。同样的条件用在WHERE阶段会更有效)。

事务:

  • 事务最重要的一点是将多个步骤捆绑成了一个单一的、要么全完成要么全不完成的操作。步骤之间的中间状态对于其他并发事务是不可见的,并且如果有某些错误发生导致事务不能完成,则其中任何一个步骤都不会对数据库造成影响。
  • PostgreSQL实际上将每一个SQL语句都作为一个事务来执行。如果我们没有发出BEGIN命令,则每个独立的语句都会被加上一个隐式的BEGIN以及(如果成功)COMMIT来包围它

窗口函数:

  • 对于每一行,在它的分区中的行集被称为它的窗口帧
  • 窗口函数只允许出现在查询的SELECT列表和ORDER BY子句中。它们不允许出现在其他地方,例如GROUP BYHAVINGWHERE子句中。这是因为窗口函数的执行逻辑是在处理完这些子句之后。另外,窗口函数在非窗口聚集函数之后执行。这意味着可以在窗口函数的参数中包括一个聚集函数,但反过来不行。
原文地址:https://www.cnblogs.com/zqzhen/p/12567158.html