mysql select * with count

时间:2014-06-04 21:49:25

标签: php mysql google-maps

我有这个查询

SELECT *, COUNT(*) as count FROM PricePaid WHERE Postcode LIKE 'L23 0TP%' GROUP BY Postcode

我得到了这个结果:

L23 0PT   House number 1    Bella Grove     LIVERPOOL   2 

但我正在寻找的是获得这个结果的方法:

L23 0PT   House number 1    Bella Grove     LIVERPOOL   2
L23 0PT   House number 17   Bella Grove     LIVERPOOL   2  

你看我正在谷歌地图上显示结果所以最初我想在地图上显示一个标记,显示每个邮政编码,包含邮政编码上出售的房屋数量(计数(*)部分)

然后我需要在同一个查询中显示该街道的属性列表,以传递到信息窗口,然后显示该帖子代码上的所有属性。

任何人都知道我是否可以在一个查询中执行此操作,任何指针都将非常感激 谢谢

2 个答案:

答案 0 :(得分:2)

您正在滥用GROUP BY的非标准MySQL扩展。请参阅:http://dev.mysql.com/doc/refman/5.6/en/group-by-extensions.html

此查询中有两件事情。一个是从您的表中提供一些细节。另一种是呈现聚合。你不能在不使用子查询的情况下做到这两点。

以下是您的需求:

SELECT pp.*, cpp.count
  FROM PricePaid AS pp
  JOIN (
         SELECT Postcode, COUNT(*) AS count
           FROM PricePaid 
          GROUP BY PostCode
       ) AS cpp ON pp.Postcode = cpp.Postcode
 WHERE pp.Postcode LIKE 'L23 0TP%' 

您是否看到虚拟汇总(聚合)表已加入您的物理表?它通过邮政编码来计算属性。

         SELECT Postcode, COUNT(*) AS count
           FROM PricePaid 
          GROUP BY PostCode

JOIN选择邮政编码中所有属性的计数,并将其包含在带有详细项目的结果集行中。

答案 1 :(得分:0)

问题(我猜不到你的模式)是你按照邮政编码进行分组。您所需的结果每个都有相同的邮政编码,因此它们显示在一行中。如果您想拥有每一行并获得所有项目的每一行,那么您应该按语句删除您的组。