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

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

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

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

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

您可以使用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-07-12
?
幕布斯6054654

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

一种肯定有效的方法

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-07-12
?
白板的微信

TA贡献1883条经验 获得超3个赞

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-07-12
  • 3 回答
  • 0 关注
  • 1484 浏览
慕课专栏
更多

添加回答

举报

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