简体   繁体   English

通过查询获取组中每个记录的MAX值

[英]Get MAX value of each record in group by query

I have a query in SQL looks like that: 我在SQL中的查询看起来像这样:

 select fldCustomer, fldTerminal, COUNT(fldbill)
 from tblDataBills
 group by fldCustomer, fldTerminal
 order by fldCustomer 

results looks like: 结果看起来像:

 fldCustomer    fldTerminal (number of bills)
 0  1   19086
 0  2   10
 0  5   236
 1  1   472
 1  5   3
 1  500 19
 2  1   292
 2  500 22

how can i get the MAX count of each customer so i get results like 我如何获得每个客户的最大数量,所以我得到如下结果

 0 1 19086
 1 1 472
 2 1 292

Thanks in advance! 提前致谢!

Use a subquery with row_number() : 使用带有row_number()的子查询:

select fldCustomer, fldTerminal, cnt
from (select fldCustomer, fldTerminal, COUNT(*) as cnt,
             row_number() over (partition by fldCustomer order by count(*) desc) as seqnum
      from tblDataBills
      group by fldCustomer, fldTerminal
     ) db
where seqnum = 1
order by fldCustomer ;

Note that in the event of ties, this will arbitrarily return one of the rows. 请注意,在发生平局的情况下,这将任意返回行之一。 If you want all of them, then use rank() or dense_rank() . 如果要全部使用,请使用rank()dense_rank()

This might require a little trickery with the RANK() function 使用RANK()函数可能需要一些技巧

SELECT fldCustomer, fldTerminal, [(number of bills)]
FROM (
    SELECT fldCustomer, fldTerminal, COUNT(fldbill) [(number of bills)],
        RANK() OVER (PARTITION BY fldCustomer ORDER BY COUNT(fldbill) DESC) Ranking
    FROM tblDataBills
    GROUP BY fldCustomer, fldTerminal
) a
WHERE Ranking = 1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM