组合 COUNT 查询 [重复]

Posted

技术标签:

【中文标题】组合 COUNT 查询 [重复]【英文标题】:Combining COUNT Queries [duplicate] 【发布时间】:2019-05-16 02:32:31 【问题描述】:

我正在计算 SQL Server 表中的特定事物。我正在使用多个计数查询,但我想知道是否可以将它们组合成一个查询,并在单个表中显示列名和计数。

我的查询是:

select count(*) as Ask_Count
from Pld_OpenSalesOrdersLines
where left(C_Item_ID, 1) = '*'

select count(*) as M_Count
from Pld_OpenSalesOrdersLines
where (left(C_Item_ID, 1) = 'M' and len(C_Item_ID) = 1)

select count(*) as MN_Count
from Pld_OpenSalesOrdersLines
where (left(C_Item_ID, 2) = 'MN' and len(C_Item_ID) = 2)

我尝试了一些愚蠢的方法来组合它们,但它们都失败了。老实说,我什至无法开始思考如何将它们结合起来,也许不可能?

谢谢!

【问题讨论】:

【参考方案1】:

您可以使用CASE 表达式来执行条件聚合:

select 
 COUNT(CASE WHEN LEFT(C_Item_ID,1)='*' THEN 1 END) AS Ask_Count,
 COUNT(CASE WHEN LEFT(C_Item_ID,1)='M' AND LEN(C_Item_ID)=1 THEN 1 END)  M_Count,
 COUNT(CASE WHEN LEFT(C_Item_ID,2)='MN' AND LEN(C_Item_ID)=2 THEN 1 END) MN_Count 
from Pld_OpenSalesOrdersLines

【讨论】:

【参考方案2】:

使用条件聚合:

select sum(case when LEFT(C_Item_ID,1) = '*' then 1 else 0 end) as count_1, 
       sum(case when LEFT(C_Item_ID,1) = 'M' AND LEN(C_Item_ID)=1 then 1 else 0 end) as count_2,
       sum(case when LEFT(C_Item_ID,2) = 'MN' AND LEN(C_Item_ID)=2 then 1 else 0 end) as count_3
from Pld_OpenSalesOrdersLines;

不过,我会这样写逻辑:

select sum(case when C_Item_ID like '*%' then 1 else 0 end) as count_1, 
       sum(case when C_Item_ID = 'M' then 1 else 0 end) as count_2,
       sum(case when C_Item_ID = 'MN' then 1 else 0 end) as count_3
from Pld_OpenSalesOrdersLines;

在列上执行left() 然后检查长度是多余的。只需使用=

【讨论】:

以上是关于组合 COUNT 查询 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

mysql查询非重复的行内容,不重复的记录数count(distinct xx)

mysql查询非重复的行内容,不重复的记录数count(distinct xx)

如何在一个 SQL Server 查询中组合不同的计数

SQL重复记录查询-count与group by having结合查询重复记录

选择数据并在所选记录中查找重复值的 sql 查询

带有单个查询的MYSQL多个COUNT()[重复]