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

8 浏览
0 Comments

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

我想知道如何编写这个查询。

我知道这个实际的语法是虚假的,但它可以帮助你理解我想要的。

我需要它以这种格式,因为它是一个更大的查询的一部分。

SELECT distributor_id,
COUNT(*) AS TOTAL,
COUNT(*) WHERE level = 'exec',
COUNT(*) WHERE level = 'personal'

我需要所有这些在一个查询中返回。

此外,它需要在一行中,所以以下内容不起作用:

'SELECT distributor_id, COUNT(*)
GROUP BY distributor_id'

admin 更改状态以发布 2023年5月21日
0
0 Comments

有一种方法是一定有效的

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 TotalCount
FROM (SELECT DISTINCT distributor_id FROM myTable) a ;

编辑:
请看@KevinBalmforth关于性能的分析,你很可能不想使用这种方法,而是选择@Taryn的答案。我将保留这个选项,以便人们可以理解他们的选择。

0
0 Comments

您可以使用带有聚合函数的CASE语句。在某些关系型数据库管理系统中,这基本上与PIVOT函数相同:

SELECT distributor_id,
    count(*) AS total,
    sum(case when level = 'exec' then 1 else 0 end) AS ExecCount,
    sum(case when level = 'personal' then 1 else 0 end) AS PersonalCount
FROM yourtable
GROUP BY distributor_id

0