首页 > 解决方案 > 仅对一列使用 WHERE 子句

问题描述

我有一个查询

SELECT COUNT(dog.id) as dogs_count, SUM(dog.age) AS total_age WHERE dog.owner IS NULL; 

我有一只餐桌狗,我需要返回所有狗的年龄总和。狗可能有也可能没有主人。我需要返回所有没有主人的狗的数量。到目前为止一切顺利 - WHERE 子句返回了所有没有主人的狗,但现在我得到了所有流浪狗的总和,而不是所有狗的总和。我如何仅将 WHERE 用于一行,或者以其他方式使用?

我有 2 只狗,每只 2 岁。其中一只狗没有主人。查询应该为 dogs_count 返回 1(因为只有一个没有所有者)和 4 对于 total_age,因为狗的年龄组合为 4

标签: mysqlsql

解决方案


如果你想要分别流浪和宠物,那么你可以使用聚合:

SELECT (CASE WHEN d.owner IS NULL THEN 'stray' ELSE 'pet' END) as status,
       COUNT(*) as dogs_count, SUM(d.age) AS total_age
FROM dogs d
GROUP BY status;

您还可以使用条件聚合将值全部放在一行中:

SELECT COUNT(*) as dogs_count, SUM(d.age) AS total_age,
       SUM(d.owner IS NULL) as num_strays,
       SUM(CASE WHEN d.owner IS NULL THEN d.age ELSE 0 END) as strays_age
FROM dogs d

推荐阅读