我正在做很多我希望在表格中展示的计数。我想在同一张桌子上显示所有计数的总和。
这是我得到的(简化 - 我有6个计数):
SELECT * FROM(SELECT COUNT()AS NB_book
item为a1,metadatavalue为m1,metadatavalue为m12,
在哪里m1.field_id = 64(因为我需要该字段存在)
AND m2.field_id = 66
和m2。 =书
AND a1.in_archive = TRUE)
(SELECT COUNT()AS NB_toys
metadatavalue为m1,metadatavalue为m12,
在哪里m1.field_id = 64(因为我需要该字段存在)
AND m2.field_id = 66
和m2。 =玩具
AND a1.in_archive = TRUE)
)
现在,我希望显示器像
------------- table ----------
| NB_book | NB_Toys | total_object |
-----------------------------
| 12 | 10 | 22 |
答案 0 :(得分: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
。
答案 1 :(得分:0)
很难弄清楚你真正想要的是什么。您可以运行完全不同的查询,每个查询返回一行结果并组合结果,如下所示:
select
(select count(*) from pgbench_accounts) as count1,
(select count(*) from pgbench_tellers) as count2 ;
但也许你不应该这样做。相反,只需单独运行每个查询,然后使用客户端而不是数据库引擎来格式化结果。