2016-09-14 88 views
1

家庭作业的问题是显示有多个礼物的房屋总数。下面的列表显示了它们是哪些,但是我无法完成查询以将它们显示为总共6个。我还是新手,正在学习Mysql,我对无知抱歉。修改我的查询

MySQL数据

**address**     **Number of presents per home** 
2 Bay Road        2 
2a Neptune Road       2 
45 Bay Road        2 
59 Black Street       2 
65 Mainway Avenue      3 
89 White Street       2 

查询使用:

SELECT address, SUM(goodBehaviour) AS `Number of Houses with Multiple presents` 
FROM wishlist 
GROUP BY address 
HAVING SUM(goodBehaviour) >1; 

我已经尝试了一些其他的查询总量的地址栏,但一直没能表现出我想要的输出。谢谢。

+0

如果您显示的数据是准确的,那么您应该找回六个地址,每个地址都有两个礼物。你究竟在做什么,或者你真正的数据集是什么? –

+0

我需要展示的是一列中的地址总数,以显示总共有6个房屋有多个礼物。我不需要显示他们有多少礼物,但只是为了显示总房子。我只是不知道如何只显示作为一列,我用这个查询来尝试工作, –

回答

1

问题是,您将goodBehaviour字段的值相加,但是您应该计算具有多个存在的地址数。

如果每个地址在你的表仅1条记录(根据您的样本数据):

select count(address) 
from wishlist 
where goodBehaviour >1 

如果你可以有多个记录一个地址,然后在子查询你需要总结的数量礼物和计数在外部查询,这里呈现的总数为地址的数量超过1:

select count(address) 
from 
    (select address, sum(goodBehaviour) as presents 
    from wishlist 
    group by address) t 
where t.presents>1 
+0

啊我明白,这真的很有帮助,我仍然习惯于多选择语句和使用多个聚合。我很抱歉,我应该建议,因为有超过1个孩子接受礼物,所以有重复的地址。非常感谢你帮助我。 –

+0

好的回答thx帮助 – Drew

0

如果您需要的房屋总数 - 您可以使用您的查询作为子查询:

SELECT count(*) FROM (SELECT address, SUM(goodBehaviour) AS `Number of Houses with Multiple presents` 
FROM wishlist 
GROUP BY address 
HAVING SUM(goodBehaviour) >1) x; 
+0

这也解决了我需要的方式,谢谢你的帮助。查询结尾的x,这是什么启动的? –

+0

@ S.A查询结尾的'x'是一个别名。您必须使用派生表的别名(派生表=在from子句中的子查询)。如果您再次查看我的答案,您可以看到我使用了字母't'。 – Shadow