mysql - 仅对一列使用 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
解决方案
如果你想要分别流浪和宠物,那么你可以使用聚合:
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
推荐阅读
- lisp - 快速排序结果中出现额外的 nil 问题
- firebase - 尝试通过 Firebase Cloud 函数将 DateTime 对象发送到 Firestore
- javascript - 为什么 Javascript 在这里没有执行预期的操作?
- flutter - 如何在按钮上正确添加外发光(框阴影?)
- xpath - xpath 如何选择文本内有数字的元素?
- javascript - 包含 gatsby 头盔脚本
- python - 在 python PyFCM 上声明 Firebase 通知 TTL
- python - 为什么这个 for for 循环在 python 中只运行一次并部分运行以下所有时间?
- pointers - 如何将用户输入存储到 char * 类型的变量中?
- java - 为什么我不能在这个数组中添加一个对象?