[英]How to get MAX(COUNT) in SQL?
我想获取在数据集中具有MAX计数的实体的名称,也想获取相同的计数。
SELECT
STORE_TYPE AS 'FREQUENT CHANNEL',
COUNT(STORE_TYPE) AS 'TOTAL TRANSACTIONS'
FROM
TRANSACTION_INFO
GROUP BY
STORE_TYPE
这将返回STORE_TYPE
的计数以及TOTAL_TRANSACTIONS
。
现在,我想获取 STORE_TYPE
以及表现最佳(MAX)的TOTAL TRANSACTIONS
。
提前致谢!
如果需要一行,则将逻辑group by
以计算计数。 然后order by
并以某种方式将结果限制在顶部:
SELECT STORE_TYPE, COUNT(*) AS cnt
FROM TRANSACTION_INFO
GROUP BY STORE_TYPE
ORDER BY cnt DESC
FETCH FIRST 1 ROW ONLY;
在平局的情况下,这仅返回一个具有最高值的任意行。 处理联系的最佳方法取决于数据库。
FETCH FIRST 1 ROW ONLY
是ISO / ANSI标准,用于将结果集限制为一行。 您的数据库可能为此使用不同的语法。
我也强烈建议您不要对列别名使用单引号。 使用不需要转义的名称-这是最好的建议。 否则,请对数据库使用转义机制,通常使用双引号,反引号或方括号。
编辑:
SQL Server中包含联系的解决方案是:
SELECT TOP (1) STORE_TYPE, COUNT(*) AS cnt
FROM TRANSACTION_INFO
GROUP BY STORE_TYPE
ORDER BY cnt DESC;
如果只需要一行,则删除WITH TIES
。
您可以简单地最大订购,然后限制为单行。
SELECT
STORE_TYPE AS 'FREQUENT CHANNEL',
COUNT(STORE_TYPE) AS 'TOTAL TRANSACTIONS'
FROM TRANSACTION_INFO
GROUP BY STORE_TYPE
ORDER BY 'TOTAL TRANSACTIONS' DESC
LIMIT 1
LIMIT的方式取决于SQL方言。
只要有一个最佳的store_type
,其他答案就可以很好地工作。 如果您还想考虑多个并列第一的位置,则应使用:
with s (t, c) as (
select store_type, count(*)
from transaction_info group by store_type
)
select
t as 'FREQUENT CHANNEL',
c as 'TOTAL TRANSACTIONS'
from s
where c = (select max(c) from s)
此查询将向您显示一个或多个行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.