首页 > 其他分享 >[code notes] check_agg_arguments

[code notes] check_agg_arguments

时间:2024-05-11 20:31:05浏览次数:13  
标签:AggCall function code agg notes check arguments sum

The SQL

select sum(sum(a)) from myt1 group by a;

This note focuses only on sum(sum(a)) and it's about how postgres rejects the sql above.

Notes

sum(sum(a))
 |   |  |
 |   |  \_ inner most argument, Var node
 |   \_	 function call
 \_ function call	 

Function call is handled by function transformFuncCall. Here's overview how tranformFuncCall works:

  • transform arguments first
  • if it's an aggregate function, transform aggregate call.
  • check_agg_arguments

For sum(sum(a)), the recursive way is like this:

FuncCall
    FuncCall
    AggCall
    check_agg_arguments
AggCall
check_agg_arguments

Here's the detail,

  • sum(sum(a)) is a FuncCall, handle its arguements sum(a).
  • sum(a) is a FuncCall, handle its arguments a.
  • check the arguments a, is's a simple Var node, that's fine.
  • sum(a) is an AggCall, check_agg_arguments of sum(a). A Var node, that's fine.
  • sum(sum(a)) is an AggCall, check_agg_arguments of sum(sum(a)), which is sum(a). Since sum(a)
    is an AggCall, postgres rejects this sql.

标签:AggCall,function,code,agg,notes,check,arguments,sum
From: https://www.cnblogs.com/lddcool/p/18187110

相关文章

  • Codeforces Round 944 (Div. 4) 补题
    A.MyFirstSortingProblemYouaregiventwointegersxandy.Outputtwointegers:theminimumofxandy,followedbythemaximumofxandy.题意:给你两个整数求出最小值和最大值Code:#include<bits/stdc++.h> usingnamespacestd;#definedebug(x)cer......
  • 【LeetCode 162】寻找峰值
    题目描述原题链接:LeetCode.162寻找峰值解题思路数组相邻元素不相等,峰值可能有多个,整个数组的最大值肯定是峰值之一,直接遍历数组获取最大值也能得到答案;但是写明复杂度要求O(logn)就是否定了最简单的O(n)遍历解法,需要用二分法;按照题意数组边界另一端等同于无穷小,可......
  • mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nona
    官方解释:ONLY_FULL_GROUP_BY是MySQL数据库提供的一个sql_mode,通过这个sql_mode来保证,SQL语句“分组求最值”合法性的检查.这种模式采用了与Oracle、DB2等数据库的处理方式。即不允许selecttargetlist中出现语义不明确的列.对于用到GROUPBY的select语句,查出......
  • 云效 Pipeline as Code 来了!这些场景,用好它效率翻倍!
    从可视化编排到支持YAML编排云效流水线Flow是开箱即用的企业级持续集成和持续交付工具,支持丰富的代码源、构建、自动化测试工具、多种部署类型和部署方式,与阿里云深度集成,还提供多种企业级特性,助力企业高效完成从开发到上线CICD过程。在业界,流水线产品通常有2种使用方式......
  • 云效 Pipeline as Code 来了!这些场景,用好它效率翻倍!
    从可视化编排到支持YAML编排云效流水线Flow是开箱即用的企业级持续集成和持续交付工具,支持丰富的代码源、构建、自动化测试工具、多种部署类型和部署方式,与阿里云深度集成,还提供多种企业级特性,助力企业高效完成从开发到上线CICD过程。在业界,流水线产品通常有2种使用方式......
  • Codeforces 832E Vasya and Shifts
    考虑到这个操作实际上就是\(5\)进制的不进位加法,其实也就是\(5\)进制下的异或。同时因为是\(5\)进制,对于\(x\in[1,4]\),\(x\times0,\cdots,x\times4\)刚好可以表示出\(0\sim4\)。于是可以考虑类似\(2\)进制的线性基弄个\(5\)进制的线性基。即令\(w_i\)为......
  • 设置.md文件默认以typora打开而不是默认以vs code打开
    在Windows10/11中,你可以通过以下步骤来更改文件扩展名的默认打开程序:打开“设置”(可以通过开始菜单或使用Win+I快捷键)。点击“应用”选项。在左侧菜单中,点击“默认应用”。在右侧,找到“按文件类型指定默认应用”,并点击它。在下拉菜单中,找到“.md”,选择“Typora”。这将......
  • Codeforces 1971H ±1
    考虑到因为只有\(3\)行,所以第\(2\)行为\(1\)的条件就是\(1\)的个数\(\ge2\)。对于这种只能去正负且有无解的问题,可以想到用个\(\text{2-SAT}\)。于是接下来考虑用\(\operatorname{AND},\operatorname{OR},\operatorname{XOR}\)来表示至少有\(2\)个\(1\)。考......
  • 669. 修剪二叉搜索树(leetcode)
    https://leetcode.cn/problems/trim-a-binary-search-tree/description/要点是区分在区间左边还是右边,在区间左边那么右子树也还有必要去查找删除,右边同理,返回的是删除后新树的根节点要注意函数要实现单层逻辑和完成闭环语义classSolution{//查找要删除的节点,进行......
  • 使用 Docker 部署 VS Code in The Browser
    1)介绍GitHub:https://github.com/coder/code-server在日常学习工作中,Vscode已成为我们首选的代码编辑器。然而,其局限性在于当我们从家到公司移动时,难以保持连续的编码体验。针对这一痛点,虽然市面上已有如VisualStudioCodespaces、Cloudstudio和CloudIDE等在线编辑器(Web......