为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用一个SQL查询获得多个计数?

如何使用一个SQL查询获得多个计数?

慕尼黑8549860 2019-08-03 13:03:24
如何使用一个SQL查询获得多个计数?我想知道如何写这个查询。我知道这个实际的语法是假的,但是它会帮助你理解我想要什么。我需要这种格式,因为它是一个大得多的查询的一部分。SELECT distributor_id, COUNT(*) AS TOTAL, COUNT(*) WHERE level = 'exec', COUNT(*) WHERE level = 'personal'我需要在一个查询中返回所有这些。另外,它需要在一行中,因此以下内容无法工作:'SELECT distributor_id, COUNT(*) GROUP BY distributor_id'
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

您可以使用CASE具有聚合函数的语句。这与PIVOT函数在某些RDBMS中:

select distributor_id,
    count(*) total,
    sum(case when level = 'exec' then 1 else 0 end) ExecCount,
    sum(case when level = 'personal' then 1 else 0 end) PersonalCountfrom yourtablegroup by distributor_id




查看完整回答
反对 回复 2019-08-05
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

一种肯定有效的方法

SELECT a.distributor_id,
    (SELECT COUNT(*) FROM myTable WHERE level='personal' and distributor_id = a.distributor_id) as PersonalCount,
    (SELECT COUNT(*) FROM myTable WHERE level='exec' and distributor_id = a.distributor_id) as ExecCount,
    (SELECT COUNT(*) FROM myTable WHERE distributor_id = a.distributor_id) as TotalCountFROM (SELECT DISTINCT distributor_id FROM myTable) a ;

编辑:
关于为什么你不想使用这种方法,而应该选择“蓝脚”的答案,请参见@KevinBalmford的性能分解。我离开这个是为了让人们了解他们的选择。




查看完整回答
反对 回复 2019-08-05
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

SELECT 
    distributor_id, 
    COUNT(*) AS TOTAL, 
    COUNT(IF(level='exec',1,null)),
    COUNT(IF(level='personal',1,null))FROM sometable;

COUNT只算non null值和DECODE将返回非空值。1只有在你的条件得到满足的情况下。




查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 318 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信