postgresql 如何在一个表上合并两个计数?

yzuktlbb  于 2023-05-28  发布在  PostgreSQL
关注(0)|答案(2)|浏览(158)

table就像:
| 国家|水果|尺寸|
| - -----|- -----|- -----|
| 日本|苹果|大|
| 日本|苹果|小|
| 日本|橙子|大|
| 新加坡|香蕉|小|
预期输出如下所示:
| 国家|类型|总计|
| - -----|- -----|- -----|
| 日本|2| 3|
| 新加坡|一个|一个|
我设法分别进行了计数。
果实类型:

SELECT country, COUNT(DISTINCT fruit) AS type 
FROM Table 
GROUP BY country

水果总数:

SELECT COUNT(fruit) 
FROM Table 
GROUP BY country
bhmjp9jg

bhmjp9jg1#

就像前面提到的那样,您可以简单地将两个聚合放在同一个SELECT列表中。count(*)更快。一个区别:它计数所有行,而count(fruit)只计数非空值。如果fruit是NOT NULL,两者都是一样的。

SELECT country, count(DISTINCT fruit) AS type, count(*) AS total
FROM   tbl
GROUP  BY country;

count(DISTINCT ...)比较贵。根据Postgres版本和数据分布,这可能会更快(做同样的事情):

SELECT country, count(*) AS type, sum(fruit_ct) AS total
FROM  (
   SELECT country, fruit, count(*) AS fruit_ct
   FROM   tbl
   GROUP  BY 1, 2
   ) sub
GROUP  BY 1;
byqmnocz

byqmnocz2#

您可以将查询合并为一个:

SELECT country, COUNT(DISTINCT fruit) AS type, COUNT(fruit) as total
FROM Table
GROUP BY country;

相关问题