PostgreSQL WHERE 计数条件

2024-05-23

我在 PostgreSQL 中有以下查询:

SELECT 
    COUNT(a.log_id) AS overall_count
FROM 
    "Log" as a, 
    "License" as b 
WHERE 
    a.license_id=7 
AND 
    a.license_id=b.license_id 
AND
    b.limit_call > overall_count
GROUP BY 
    a.license_id;

为什么我会收到此错误:

错误:列“overall_count”不存在

我的表结构:

License(license_id, license_name, limit_call, create_date, expire_date)
Log(log_id, license_id, log, call_date)

我想检查许可证是否已达到特定月份的通话限制。


SELECT a.license_id, a.limit_call
     , count(b.license_id) AS overall_count
FROM   "License"  a
LEFT   JOIN "Log" b USING (license_id)
WHERE  a.license_id = 7 
GROUP  BY a.license_id  -- , a.limit_call  -- add in old versions
HAVING a.limit_call > count(b.license_id)

从 Postgres 9.1 开始,主键涵盖了表中的所有列GROUP BY条款。在旧版本中你必须添加a.limit_call to the GROUP BY列表。这9.1 的发行说明 https://www.postgresql.org/docs/current/release-9-1.html:

允许非GROUP BY主查询时查询目标列表中的列 键指定在GROUP BY clause

进一步阅读:

  • 当我按键聚合时,为什么无法从“GROUP BY”中排除依赖列? https://stackoverflow.com/questions/62095987/why-cant-i-exclude-dependent-columns-from-group-by-when-i-aggregate-by-a-key

您当时的情况WHERE条款必须移至HAVING子句,因为它引用聚合函数的结果 (after WHERE已应用)。并且你不能参考输出列(列别名)在HAVING子句,您只能在其中引用输入列。所以你必须重复这个表达。手册: https://www.postgresql.org/docs/current/sql-select.html#SQL-SELECT-LIST

输出列的名称可用于引用该列的值ORDER BY and GROUP BY条款,但不在WHERE or HAVING条款;在那里你必须写出表达式。

我颠倒了表中的顺序FROM子句并稍微清理了语法以使其不那么混乱。USING这里只是为了符号方便。

I used LEFT JOIN代替JOIN,因此您根本不排除没有任何日志的许可证。

仅对非空值进行计数count()。既然你想数数相关条目在表中"Log"使用起来更安全且稍微便宜count(b.license_id)。该列用于连接,因此我们不必担心该列是否可以为空。
count(*)甚至更短、更快。如果你不介意计算一下1 for 0左表中的行,使用它。

旁白:我建议not to use 混合大小写标识符 https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS如果可能的话,在 Postgres 中。非常容易出错。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL WHERE 计数条件 的相关文章

随机推荐

  • QWidget::showMinimized() 不起作用

    在 Ubuntu 13 04 上 如果使用QWidget showMinimized 为了最小化窗口 我发现通过单击系统任务栏上的应用程序图标恢复它后 调用QWidget showMinimized 无法工作 connect minimum
  • 闪亮的仪表板侧边栏中的可折叠菜单项

    我的侧边栏中有两个菜单项 目前 如果我单击任何菜单项 则会显示所有菜单项的选项卡项 我想让它可折叠 如果我单击多个名称菜单 单个分析应该折叠 如果我单击单个分析 多个分析应该折叠 目前的设计是 相同的可重现代码是 library shiny
  • 如何删除Windows 10版本1809剪贴板历史记录?

    如果我启用剪贴板历史记录 https www windowscentral com how use new clipboard windows 10 october 2018 update在 Windows 10 版本 1809 上 它将开
  • 使用虚函数进行类型转换

    在下面的代码中 pC pA class A class B public A public int i class C public B public char c int main C pC new C A pA A pC return
  • 如何在多进程系统中实现锁定?

    我们正在并行运行许多詹金斯项目 我们使用 python 并且选择使用 pyenv 管理虚拟环境 不幸的是 pyenv 有一个众所周知的竞争条件 https github com yyuu pyenv issues 174 为了解决这个问题
  • Rails Structure.sql 和 schema.rb 之间有什么区别

    我知道 schema rb 文件是一个 ruby 文件 它是在运行 rake 迁移时创建和修改的 但是 Structure sql 呢 我在一些项目中看到了 schema rb 在其他项目中看到了 Structure sql 以及在一些这两
  • 计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么?

    计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么 用这个 echo substr count abca a will echo 2
  • CSS 网格/布局框架,专注于固定元素和单页全屏布局

    经验法则 如果您在布局中过多地使用 CSS 请切换到框架 我已经研究了数十个网格 布局框架 其中大多数都专注于传统的文档网格布局 我的页面更像是一个 SPA 单页应用程序 它类似于桌面应用程序使用的布局 显然 HTML 不能很好地处理这个问
  • 当我有自定义身份验证模型时,如何登录 Django Rest 可浏览 API?

    我有一个自定义用户模型 如下所示account models py from django contrib auth modles import AbstractUser from django db models signals impo
  • 码头工人。将动态主机 IP 添加到容器上的环境变量

    我有一个非常特殊的场景 包含一些 docker 容器的虚拟机 该容器之一需要知道主机 IP 问题是如果我在容器构建时传递主机 IP 或使用 e在 docker run 命令上 它在容器上保持 静态 始终相同 那一刻 该虚拟机可以位于笔记本电
  • LaTeX 报告章节样式

    如何更改 LaTeX 报告类中的章节样式 我发现了一些关于 makechapterstyle 但它似乎不适用于报告 或者至少不适用于my报告 我很确定一定有某种方法可以改变这一点 我知道 LaTeX 不太适合编程 但我不知道有什么更好的地方
  • 如何避免使用 python 处理空的标准输入?

    The sys stdin readline 返回之前等待 EOF 或新行 所以如果我有控制台输入 readline 等待用户输入 相反 我想打印帮助并在没有需要处理的情况下退出并显示错误 而不是等待用户输入 原因 我正在寻找一个Pytho
  • 将字符串解析为结构变量

    我试图将字符串解析为其中包含不同变量的结构向量 这是我到目前为止所拥有的 但似乎不起作用 struct client string PhoneNumber string FirstName string LastName string Ag
  • 使用 xtable 对乳胶输出的表进行排序

    我正在尝试生成一个排序表并导出到乳胶中 然而 xtable 似乎无法处理排序表 建议 a lt sample letters 500 replace T b lt table a c lt sort table a decreasing T
  • 计算引擎启动脚本无法以非 root 用户身份执行

    将我的问题归结为最简单的情况 我使用带有以下启动脚本的 Compute Engine bin bash sudo useradd m drupal su drupal cd home drupal touch test txt 我可以确认
  • 错误类型 3 - 活动类不存在

    我正在尝试运行 webRTC 应用程序 但返回以下错误 启动应用程序 com onlinevoicecallapp com onlinevoicecallapp MainActivity 设备外壳命令 am start n com onli
  • 缺少嵌入互操作类型属性

    在一个 C 项目中 我收到以下警告 警告 CS1762 创建了对嵌入式互操作程序集 Interop SomeLibrary dll 的引用 因为间接引用了程序集 ALibraryOfMine dll 创建的该程序集 考虑更改任一程序集的 嵌
  • 将SQL数据引入jquery availabletag

    我正在尝试制作自动完成文本框 但如何将 SQL 数据包含到 jquery 可用标记并循环它 我无法根据以下代码执行该功能 任何帮助 将不胜感激 谢谢 这是我的预期输出 预期结果演示 http jsfiddle net VvETA 71 jq
  • Reactive Spring 不支持 HttpServletRequest 作为 REST 端点中的参数?

    我创建了一个 RestController 如下所示 RestController public class GreetingController RequestMapping value greetings method RequestM
  • PostgreSQL WHERE 计数条件

    我在 PostgreSQL 中有以下查询 SELECT COUNT a log id AS overall count FROM Log as a License as b WHERE a license id 7 AND a licens