2012-03-19 42 views
0

我有以下查询:组排序在MySQL

SELECT * FROM quotes 
INNER JOIN quotes_panels ON quotes.wp_user_id = quotes_panels.ID 
WHERE quotes.created >= '$startDate' 
AND quotes.created <= '$endDate' AND quotes.wp_user_id != '0' 

该查询可产生来自同一用户(quotes.wp_user_id)多行,但是我只是想表明它有最大的屋顶面积行( quotes.roofarea)。

然而,当我加入GROUP BY quotes.wp_user_id它会自动最小quotes.ID行,而不是拥有最大quotes.roofarea行。将ORDER BY quotes.roofarea DESC添加到查询结尾时,它将整个结果排序,而不仅仅是“GROUP BY”的结果。

任何人都可以帮助获得所需结果的查询?

感谢

回答

0

试试这个

SELECT * FROM quotes 
INNER JOIN quotes_panels ON quotes.wp_user_id = quotes_panels.ID 
WHERE quotes.created >= '$startDate' 
AND quotes.created <= '$endDate' AND quotes.wp_user_id != '0' 
AND quotes.roofarea = (SELECT MAX(q.roofarea) FROM quotes q WHERE q.wp_user_id = quotes.wp_user_id) 
GROUP BY quotes.wp_user_id 

立即检查

+0

感谢您的查询,但其作为来自同一用户的两行仍显示未正确分组。 – 2012-03-19 11:06:32

+0

如果这是公认的答案,那么也upvote它.... :) – neeraj 2012-03-20 06:10:42

0

你必须命令你将它们分组前行。

SELECT * FROM (SELECT * FROM quotes 
INNER JOIN quotes_panels ON quotes.wp_user_id = quotes_panels.ID 
WHERE quotes.created >= '$startDate' 
AND quotes.created <= '$endDate' AND quotes.wp_user_id != '0' 
ORDER BY quotes.roofarea DESC) a 
GROUP BY a.wp_user_id 
+0

感谢您的查询,我想,但收到以下错误:“数据库错误重复列名‘ID’” – 2012-03-19 11:05:43

+0

这可能是由引起*在内部SELECT语句中。尝试列出所需的字段而不是*。两个表中都有一个名为ID的列。引号和quotes_panels。 SQL不知道选择哪一个。 – 2012-03-19 14:58:08

0

在MySQL GROUP BYORDER BY之前完成的,所以你需要做的这两个查询:

SELECT * FROM 
    (SELECT * FROM quotes 
    INNER JOIN quotes_panels ON quotes.wp_user_id = quotes_panels.ID 
    WHERE quotes.created >= '$startDate' 
    AND quotes.created <= '$endDate' AND quotes.wp_user_id != '0' 
    ORDER BY quotes.roofarea DESC) AS subset 
GROUP BY subset.wp_user_id 
+0

感谢您的查询,我想,但收到以下错误:行正确“数据库错误重复列名‘ID’” – 2012-03-19 11:07:14

0

您必须添加一个聚合函数是这样的:

SELECT *, MAX(quotes.roofarea) FROM quotes 
INNER JOIN quotes_panels ON quotes.wp_user_id = quotes_panels.ID 
WHERE quotes.created >= '$startDate' 
AND quotes.created <= '$endDate' AND quotes.wp_user_id != '0' 
GROUP BY quotes.wp_user_id 

了解更多关于在这里:​​

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

+0

感谢您的查询,这组,但不挑最高quotes.roofarea该行一些原因? – 2012-03-19 11:08:19

+0

@ElliotReeve什么数据类型是quotes.roofarea的? – fancyPants 2012-03-19 11:13:54

+0

quotes.roofarea是INT(11) – 2012-03-19 11:15:28