同一张表中 COUNT 的总和

Posted

技术标签:

【中文标题】同一张表中 COUNT 的总和【英文标题】:SUM of COUNTs in the same table 【发布时间】:2014-06-04 15:28:58 【问题描述】:

我正在做许多我想在表格中显示的计数。我想在同一张表中显示所有计数的总和。

这是我得到的(简化 - 我得到了 6 个计数):

SELECT * FROM (SELECT COUNT() AS NB_book 项目为 a1,元数据值为 m1,元数据值为 m12, WHERE m1.field_id = 64(因为我需要该字段存在) AND m2.field_id = 66 和平方米。 = 书 并且 a1.in_archive = TRUE ) (SELECT COUNT() AS NB_toys 元数据值为 m1,元数据值为 m12, WHERE m1.field_id = 64(因为我需要该字段存在) AND m2.field_id = 66 和平方米。 = 玩具 和 a1.in_archive = TRUE) )

现在,我希望显示像

----------表格---------- |NB_book | NB_玩具 |总对象 | ----------------------------------------- | 12     | 10      | 22        |

【问题讨论】:

我不明白你的问题,你的查询有语法错误。 【参考方案1】:

你想要一些类似的东西:

SELECT
    sum(CASE WHEN condition_1 THEN 1 END) AS firstcount,
    sum(CASE WHEN condition_2 THEN 1 END) AS secondcount,
    sum(thecolumn) AS total
FROM ...

您的示例查询过于模糊,无法从中构建可用的内容,但这会给您提供思路。上述条件可以是任何布尔表达式。

如果您愿意,可以使用NULLIF 代替CASE WHEN ... THEN ... END。我更喜欢坚持标准的CASE

【讨论】:

【参考方案2】:

很难弄清楚你真正想要什么。您可以运行完全不同的查询,每个查询都返回单行结果,然后像这样组合结果:

select 
   (select count(*) from pgbench_accounts) as count1, 
   (select count(*) from pgbench_tellers) as count2 ;

但也许你不应该那样做。相反,只需单独运行每个查询并使用客户端而不是数据库引擎来格式化结果。

【讨论】:

以上是关于同一张表中 COUNT 的总和的主要内容,如果未能解决你的问题,请参考以下文章

Oracle -- 多个count统计一张表中多个字段等于某值

MySQL INSERT 在同一张表上使用带有 COUNT() 的子查询

加入同一张表

MySQL:使用另一个表中的 COUNT 更新表?

sqlserver怎么实现同一个表中多个count查询并且分组并且统计总数

sql server 中 怎样判断一张表中 数据 是 相同的