我想获取在数据集中具有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
和表现最佳(最大)的TOTAL TRANSACTIONS
。
谢谢!
答案 0 :(得分:5)
如果要一行,则逻辑为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
。
答案 1 :(得分:2)
您可以简单地按最大值排序,然后限制为一行。
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方言。
答案 2 :(得分:1)
只要有一个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)
此查询将向您显示一个或多个行。