2013-05-04 35 views
0

我有一个apartment许多列的表。有些公寓分享priceidlayout列值。然而,他们仍然有不同的价值area(劣质工艺)。我可以使用聚合函数并使用MySQL在一个查询中获取单个结果吗?

我需要:

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 
+0

能否请您给您的期望输出的例子吗? – Juampi 2013-05-04 12:28:44

回答

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 

这将显示所有公寓的数据,与MAX,MIN沿着数和计数具有相同的价格和idlayout其他公寓。

+0

这工作(固定字段名称后),并完全回答问题。 – sbichenko 2013-05-04 12:39:35

2

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

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

这很棒:给出一个逗号分隔值列表,可以轻松解析。 *这就是我真正需要的*,尽管我没有在问题中提到它(我只需要公寓数量,而不是整排,因为我现在认识到了!)。 – sbichenko 2013-05-04 12:35:53

+0

我接受@ fthiella的回答,因为它实现了我所要求的,即使它对我个人而言比我的个人更有用。 – sbichenko 2013-05-04 12:42:34

相关问题