我有一个关于在where语句中使用聚合函数的问题。
SELECT [tb_users].[id_user]
,[name]
,[Title]
,[FirstName]
,[LastName]
,[type]
,sum ([tb_LockAuditTrail].[price]) as SumPrice
FROM [SALTO_SPACE].[dbo].[tb_Users]
join [tb_LockAuditTrail]
on [tb_Users].[Cardcode] = [tb_LockAuditTrail].[Cardcode]
where [type] = 1
group by [tb_users].[id_user]
,[name]
,[Title]
,[FirstName]
,[LastName]
,[type]
order by [SumPrice] desc
一切正常。从这个数据集中,我只想选择高于某个特定值的记录 SumPrice
水平。我该怎么做?
我不能用这个别名 SumPrice
因为在where语句中不允许使用别名 where
声明。
我也不能使用聚合 SUM
在where语句中的函数。因此,目前除了在excel工作表中过滤结果之外,我没有看到其他解决方案。
1条答案
按热度按时间tkclm6bt1#
在group by block之后和orderby block之前写入
相应地更改100
即使拥有不是一件事,你也不必使用excel。每个select都会创建一个数据块,这些数据块可以像表一样使用,因此您可以将其全部用括号括起来,给它一个别名,然后像从表中选择一样从查询中进行选择:
开始接受这样一个概念:表只是查询可以使用的一种“数据块”;如果您记住,您可以使用来自其他源(如查询和表值函数)的数据块,那么您的sql查询能力将大大提高。下面是另一个例子:
您还可以使用with命令对查询进行别名,以便将其用作表:
这是一种方法,我们可以得到每一个产品的细节,但也是所有的价格在类别和计数的所有产品在不同的仓库-也许没有意义的数据,但我演示了如何使用子查询生成数据块,可以连接到表,而且每个细节行也可以有一个摘要方面。通常情况下,生成摘要时必须忽略细节,因此这里的学习理念是:
子查询是数据块,就像表一样,可以像表一样连接
给每样东西一个别名并使用它
要同时获取详细信息和摘要,请生成摘要并将其连接到详细信息
一个表可以在查询中多次出现,甚至可以连接到它自己,只要表的两个引用具有不同的别名