我有个疑问
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。
发布于 2020-01-17 12:19:23
如果您同时需要流浪狗和宠物,那么可以使用聚合:
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发布于 2020-01-17 12:27:09
您可以进行聚合:
select count(*) as Total_Dogs, sum(d.owner IS NOT NULL) as dogs_count,
sum(d.age) as total_age
from dog d;https://stackoverflow.com/questions/59787199
复制相似问题