Sql 如何从子查询的总和中筛选结果?

Sql 如何从子查询的总和中筛选结果?,sql,sql-server,join,subquery,Sql,Sql Server,Join,Subquery,我试图返回两个表中连接在一起的两列的计数总和。我需要它返回大于16的结果。使用MSSQL 我期待着: -------------------------------------- total_customers | album_title -----------------|-------------------- 17 | "Blah Blah" -------------------------------------- 如果没有HAVING子句,查

我试图返回两个表中连接在一起的两列的计数总和。我需要它返回大于16的结果。使用MSSQL

我期待着:

--------------------------------------
total_customers  |   album_title
-----------------|--------------------
17               |    "Blah Blah"
--------------------------------------
如果没有HAVING子句,查询将按我所期望的那样汇总列

--------------------------------------
total_customers  |   album_title
-----------------|--------------------
17               |    "Blah Blah"
--------------------------------------
5                |   "another title"
--------------------------------------
3                |   "I'm a title"
--------------------------------------
当我尝试使用大于>符号添加HAVING子句时,它不会返回任何结果

--------------------------------------
total_customers  |   album_title
-------------------------------------

当我把它切换到小于时,你应该使用聚合函数,如下所示。原因是having子句将在select之前和group by之后首先执行

我已将total_客户从group by中删除


您的数据模型似乎有点不正确。名为customers的表应包含客户数据,例如名称、地址或客户编号。名为album的表应包含相册数据,例如标题和价格。然后应该有第三个订单表,显示哪个客户购买了哪个相册。在您的模型中,似乎customers表实际上是order表,包含相册ID和customer ID。该表包含一个名为ID的列,但您会清楚地计算它,因为您希望重复?名为ID的列应唯一标识其表中的行。我希望有重复项。这实际上是一个家庭作业问题,模型是这样设置的,我更改了表列名,所以我不会给出答案。这可能会让读这篇文章有点困惑。如果我漏掉了,它会给我错误的答案。下面的答案解决了我的问题。感谢您的输入。请在代码问题中给出一个剪切粘贴和可运行的代码,包括最小的代表性示例输入代码;期望和实际输出,包括逐字记录错误消息;标签和版本;清晰的说明和解释。尽可能少地给出代码,即显示为OK的代码,并通过显示为not OK的代码进行扩展。调试基础。对于包含DBMS和DDL(包括约束和索引)的SQL,请输入格式化为表的代码。暂停总体目标的工作,将代码切分为第一个表达式,不要给出您期望的内容,说出您期望的内容和原因。用英语描述您想要的内容,以重复您在错误代码中使用的一些运算符是没有帮助的。使用足够的单词、句子和引用部分例子,清楚、完整地说出你的意思。在给出业务关系/关联、表基或查询结果时,请说明其中的一行根据其列值对业务状况的说明。PS请通过编辑而不是评论进行澄清。是的,表名和列名customers.id确实让人有点困惑:-看起来这样就足够了:选择COUNTDISTINCT c.id作为总客户,a.album\u title从相册a内部加入客户c ON c.album\u id=a.album\u id组BY a.album\u title具有COUNTDISTINCT c.id>16。
--------------------------------------
total_customers  |   album_title
-----------------|--------------------
17               |    "Blah Blah"
--------------------------------------
5                |   "another title"
--------------------------------------
3                |   "I'm a title"
--------------------------------------
SELECT SUM(total_customers) as total_customers, album_title
FROM (SELECT COUNT(DISTINCT customer.id) as total_customers , album.album_title
FROM album
INNER JOIN customer ON album.album_id = customer.album_id
GROUP BY customer.id, album_title
) s
GROUP BY total_customers, album_title
HAVING total_customers > 16;
SELECT 
    SUM(total_customers) as total_customers, 
    album_title
FROM 
(
    SELECT 
        COUNT(DISTINCT c.id) as total_customers , 
        a.album_title
    FROM album a
    INNER JOIN customer c
    ON a.album_id = c.album_id
    GROUP BY c.id, album_title
) s
GROUP BY 
    album_title
HAVING SUM(total_customers) > 16;