你能在一个 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;
我正在使用 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;