我有一个名为Apartments的表,它有三列: apartment_type、person和date。包括某个人和日期选择的户型。我要数一下每种类型的公寓有多少人选择。有些公寓类型人口为0。
下面是我的问题:
SELECT apartment_type, COUNT(*) AS TOTAL
FROM Apartments
GROUP BY apartment_type它工作得很好,但它不包括值为0的公寓类型。请帮我纠正这个问题。
发布于 2016-07-12 01:42:45
如果某些appartment_type具有0填充-您的表将不包含任何具有该类型的记录-因此您必须从存在所有公寓类型的另一个表中添加一些连接。或者使用union创建所有填充为0的条目。
类似于:
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发布于 2016-07-12 01:59:27
我大体上同意Nosyara的回答,但我不同意他对union all的样本查询。我不确定它是否有效,而且它肯定太复杂了。
如前所述,如果您没有包含所有可能公寓类型的表,请创建一个。然后,您可以使用简单的left join编写查询
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(*)的。如果你没有某一种公寓类型的公寓,那么这种变化对于准确计算是很有必要的。
发布于 2016-07-12 02:00:21
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使用左连接将为您提供连接左侧的所有内容(即所有类型)以及右侧匹配的所有内容。
https://stackoverflow.com/questions/38312891
复制相似问题