我可以使用聚合函数并在MySQL的一个查询中获得单独的结果吗?

时间:2013-05-04 12:25:29

标签: mysql sql group-by aggregate-functions

我有一个包含许多列的apartment表。部分公寓共享priceidlayout列值。但是,它们仍然具有area(伪劣工艺)的不同值。

我需要:

1)将公寓分组为idlayoutprice,获取最低和最高area并计算每组中的公寓数量。

2)列出每个小组的单独公寓。

这可以通过一个查询来完成,我是否应该尝试这样做?

我尝试了什么:

我得到了第一部分的查询,但我无法想出一种方法来列出结果集中的公寓。

SELECT COUNT( * ), price, rooms, MAX( area ) AS areaMax, MIN( area ) AS areaMin
FROM apartment
GROUP BY price, layout_idlayout
ORDER BY rooms ASC, price ASC 

2 个答案:

答案 0 :(得分:2)

您可以使用group_concat列出组中的所有值:

SELECT  layout_idlayout
,       price
,       group_concat(name) as ListOfNames
,       MAX(area) as MaxArea
FROM    apartment
GROUP BY 
        price
,       layout_idlayout

答案 1 :(得分:1)

您需要使用JOIN:

SELECT apartment.*, areaMax, areaMin, cnt
FROM
  apartment INNER JOIN (
    SELECT
      idlayout, price, MAX(area) AS areaMax, MIN(area) AS areaMin, COUNT(*) cnt
    FROM
      apartment
    GROUP BY
      price, layout_idlayout) ap_grp
  ON apartment.idlayout=ap_grp.idlayout AND apartment.price=ap_grp.price

这将显示所有公寓数据,以及具有相同价格和idlayout的其他公寓的MAX,MIN和COUNT。