首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只对一列使用WHERE子句

只对一列使用WHERE子句
EN

Stack Overflow用户
提问于 2020-01-17 12:17:27
回答 2查看 285关注 0票数 0

我有个疑问

代码语言:javascript
复制
SELECT COUNT(dog.id) as dogs_count, SUM(dog.age) AS total_age WHERE dog.owner IS NULL; 

我有一只餐桌狗,我需要归还所有狗的年龄之和。狗可能有主人,也可能没有主人。我要把所有没有主人的狗数还回去。到目前为止还好-- WHERE条款把所有没有主人的狗都还给了,但是现在我得到了所有流浪狗的总和,而不是所有狗的总和。我怎样才能只在一行中使用WHERE,或者以其他方式使用?

我有两只狗,每只都是两岁。其中一条狗没有主人。查询应该返回dogs_count 1(因为只有一个没有所有者),total_age返回4,因为狗的年龄之和是4。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-17 12:19:23

如果您同时需要流浪狗和宠物,那么可以使用聚合:

代码语言:javascript
复制
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;

还可以使用条件聚合将所有值都放在一行中:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-01-17 12:27:09

您可以进行聚合:

代码语言:javascript
复制
select count(*) as Total_Dogs, sum(d.owner IS NOT NULL) as dogs_count, 
       sum(d.age) as total_age
from dog d;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59787199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档