【问题标题】:Filter an SQL query SELECT statement using HAVING使用 HAVING 过滤 SQL 查询 SELECT 语句
【发布时间】:2023-02-03 19:27:26
【问题描述】:

我创建了一个 select 语句,将来自三个数据库表的数据汇集在一起​​。下面是 SQL 查询:

SELECT name as "Group name", limit as "Membership limit", 
(SELECT count(userid) FROM Table3 WHERE Table3.groupid = Table1.id) as "Current number of members" 
FROM Table1 
INNER JOIN Table2 
ON Table2.groupid = Table1.id 
ORDER BY name

它在如下所示的表中正确显示数据:

SQL Query Results Table

但是,我想过滤此查询的结果,以便该表仅显示“当前成员数”大于“成员资格限制”的行。在这种情况下,当成员限制仅为 2 时,它应该只显示名为“组 3”的组,该组有 3 个当前成员。

我尝试将 GROUP BY 语句与 HAVING 语句一起包括在内,如下所示:

SELECT name as "Group name", limit as "Membership limit", 
(SELECT count(userid) FROM Table3 WHERE Table3.groupid = Table1.id) as "Current number of members"
FROM Table1
INNER JOIN Table2
ON Table2.groupid = Table1.id
GROUP BY Table1.id, Table2.limit
HAVING "Current group members" > limit
ORDER BY name

当我运行查询时,这不会引发任何错误,但它没有返回任何数据(而不是返回第 3 组的值),并且它生成如下警告:

警告:#1292 截断不正确的 DOUBLE 值:“当前组成员”

我确定我做错了对其他人来说很明显的错误,我将感谢您的专家建议!

【问题讨论】:

  • 可能这里有人会直接知道如何修复您的查询,但我认为在没有看到任何输入数据和预期结果的情况下很难回答您的问题。请阅读并关注stackoverflow.com/help/minimal-reproducible-example
  • 您使用的是哪个数据库管理系统? (我本以为会出现另一个错误...)

标签: sql select count having


【解决方案1】:

您可以修改 HAVING 子句以在 SELECT 语句中引用正确的别名,如下所示:

SELECT name as "Group name", limit as "Membership limit",
(SELECT count(userid) FROM Table3 WHERE Table3.groupid = Table1.id) as "Current number of members"
FROM Table1
INNER JOIN Table2
ON Table2.groupid = Table1.id
GROUP BY Table1.id, Table2.limit
HAVING "Current number of members" > limit
ORDER BY name

问题是您在 HAVING 子句中引用了“当前组成员”,这与 SELECT 语句中使用的别名“当前成员数”不匹配。

【讨论】:

    猜你喜欢
    • 2016-02-06
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多