首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在查询单个表时包含零结果?

如何在查询单个表时包含零结果?
EN

Stack Overflow用户
提问于 2016-07-12 01:34:12
回答 3查看 87关注 0票数 0

我有一个名为Apartments的表,它有三列: apartment_type、person和date。包括某个人和日期选择的户型。我要数一下每种类型的公寓有多少人选择。有些公寓类型人口为0。

下面是我的问题:

代码语言:javascript
复制
SELECT apartment_type, COUNT(*) AS TOTAL
FROM  Apartments
GROUP BY apartment_type

它工作得很好,但它不包括值为0的公寓类型。请帮我纠正这个问题。

EN

回答 3

Stack Overflow用户

发布于 2016-07-12 01:42:45

如果某些appartment_type具有0填充-您的表将不包含任何具有该类型的记录-因此您必须从存在所有公寓类型的另一个表中添加一些连接。或者使用union创建所有填充为0的条目。

类似于:

代码语言:javascript
复制
SELECT apartment_type, COUNT(*) AS TOTAL
FROM  (SELECT * FROM Apartments UNION ALL SELECT apartment_type, 0 as person, 0 as date from SomeTableWithFullListOfTypes group by apartment_type) as tmp
GROUP BY apartment_type
票数 2
EN

Stack Overflow用户

发布于 2016-07-12 01:59:27

我大体上同意Nosyara的回答,但我不同意他对union all的样本查询。我不确定它是否有效,而且它肯定太复杂了。

如前所述,如果您没有包含所有可能公寓类型的表,请创建一个。然后,您可以使用简单的left join编写查询

代码语言:javascript
复制
select t.apartment_type, count(a.apartment_type) as total
  from apartment_types t
  left join apartments a
    on a.apartment_type = t.apartment_type
 group by t.apartment_type

请注意count(a.apartment_type)是如何取代count(*)的。如果你没有某一种公寓类型的公寓,那么这种变化对于准确计算是很有必要的。

票数 1
EN

Stack Overflow用户

发布于 2016-07-12 02:00:21

代码语言:javascript
复制
SELECT apartment_type, COUNT(apartment.*) AS TOTAL
FROM  apartment_type 
left join apartment
on  apartment_type.aparentment_type = apartements.apartment_type
GROUP BY apartment_type

使用左连接将为您提供连接左侧的所有内容(即所有类型)以及右侧匹配的所有内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38312891

复制
相关文章

相似问题

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