聚合函数以提取更多记录字段数据

Posted

技术标签:

【中文标题】聚合函数以提取更多记录字段数据【英文标题】:Aggregate Functions To Pull More Record Field Data 【发布时间】:2016-07-01 09:53:10 【问题描述】:

我想知道当我使用 Group By 查询时从特定行获取数据的最佳方式是什么。实际查询比我在此处提供的示例更复杂,因此我正在寻找除 Sales 表上的子选择以外的其他内容。

我正在使用 MSSQL 2008,我想要一些允许我从具有最大值(数量)的销售记录中获取日期字段的东西。

查询

select uid, firstName, lastName, AmountFromTagetedRow, DateFromTargetedRow,
from users u inner join 
     sales s on u.uid = s.custID
group by uid, firstName, lastName
order by uid

用户

uid  firstName  lastName
1    Sam        Smith
2    Joe        Brown
3    Kim        Young

销售

sid  Custid  date        amount ...
1    1       2016-01-02  100
2    3       2016-01-12  485
3    1       2016-01-22  152
4    2       2016-02-01  156
5    1       2016-02-02  12
6    1       2016-03-05  84
7    2       2016-03-10  68

结果

uid  firstName  LastName  amount  date
1    Sam        Smith     152     2016-01-22
2    Joe        Brown     156     2016-02-01
3    Kim        Young     485     2016-01-12

【问题讨论】:

假设 Results 是您想要的输出? TargetedRow 是什么意思?您希望执行什么聚合功能? 克里斯,如果问题不是很清楚,抱歉。肖恩回答了这个问题。我一直坚持在一个 Group By 语句中执行此操作,但使用 WITH 和 ROW_NUMBER() 是获得所需内容的最佳方式。 【参考方案1】:

您发布的查询与您的金额不匹配,但类似这样的内容应该会让您指向正确的方向。

with SortedResults as
(
    select uid
        , firstName
        , lastName
        , AmountFromTagetedRow
        , DateFromTargetedRow
        , ROW_NUMBER() over (partition by u.uid order by AmountFromTagetedRow desc) as RowNum
    from users u inner join 
         sales s on u.uid = s.custID
    group by uid
        , firstName
        , lastName
)

select *
from SortedResults
where RowNum = 1
order by uid

【讨论】:

谢谢肖恩。我在这个问题上得到了隧道视野,忘记了我可以用 WITH 来做这个。

以上是关于聚合函数以提取更多记录字段数据的主要内容,如果未能解决你的问题,请参考以下文章

mysql之聚合函数

SQL Server中的聚合函数都有哪些?

SQL数据库中聚合函数SUM和COUNT的用法

SQL Server中的聚合函数都有哪些?

数据库常用的聚合函数

sql聚合函数的应用