你能在一个 SQL 语句中 return 多个 COUNT 吗?

Can you return multiple COUNTs in one SQL statement?

我正在使用 Java 和 SQL,我正在尝试数一数动物园中的所有山羊。我知道我可以使用以下查询:

  SELECT COUNT(1) FROM PettingZoo pz WHERE pz.animalType = 'GOAT'

很简单。现在,假设山羊有以下三种颜色之一:棕色、黑色或灰色。如果我想统计每种颜色的数量,我可以执行以下查询:

  SELECT COUNT(1) FROM PettingZoo pz WHERE pz.animalType = 'GOAT' AND
       pz.animalType.color = 'BROWN'

  SELECT COUNT(1) FROM PettingZoo pz WHERE pz.animalType = 'GOAT' AND
       pz.animalType.color = 'BLACK'

  SELECT COUNT(1) FROM PettingZoo pz WHERE pz.animalType = 'GOAT' AND
       pz.animalType.color = 'GREY'

此方法有效,但速度较慢。这样做会打开 table 四次:一次获取总数,另外 3 次获取单个颜色。 有什么方法可以 return 一个 查询中的所有四种颜色吗?

编辑: 为了清楚起见,假设有 15 只山羊。 9 个是棕色的,0 个是黑色的,6 个是灰色的。第一个查询 return 15。第二个查询 return 9。第三个和最后一个查询分别 return 0 和 6。我正在寻找一个 return 一次包含所有四个值的值(因此我不是在四次不同的时间读取相同的 table)。可能是数组? { 15, 9, 0, 6 }

  SELECT SUM(case when pz.animalType.color = 'BROWN' then 1 else 0 end) as browns,
         SUM(case when pz.animalType.color = 'BLACK' then 1 else 0 end) as blacks,
         SUM(case when pz.animalType.color = 'GREY'  then 1 else 0 end) as greys ,
         COUNT(1) as total
  FROM PettingZoo pz WHERE pz.animalType = 'GOAT' AND
         (
           pz.animalType.color = 'BROWN' or 
           pz.animalType.color = 'BLACK' or 
           pz.animalType.color = 'GREY'
         )
  WHERE pz.animalType is not null

您可以使用 group by 在一个查询中获取所有计数:

SELECT 
      pz.animalType.color, COUNT(*)
FROM PettingZoo pz
WHERE pz.animalType = 'GOAT'
GROUP BY pz.animalType.color

我想凯文忘记了 group by 子句:

SELECT pz.animalType.color, COUNT(*) FROM PettingZoo pz WHERE
pz.animalType = 'GOAT' GROUP BY pz.animalType.color;