2013-03-07 58 views
0

我遇到了将我的行分组的问题。MySQL集团按订单

示例表

ID, GroupID, INFO, COUNTER 
1, 123456, INFO, 21 
2, 654321, INFO, 20 
3, 123456, INFO, 30 
4, 654321, INFO, 11 

首先,我想这个显示它们:

SELECT * 
FROM table 
GROUP BY GroupID 
ORDER BY COUNTER DESC 
LIMIT 0, 60 

所以应该只显示组类型之一。它确实,但是秩序并不好。所以我认为它没有得到与GroupID配对的正确数字counter

右侧显示的结果将是:(主要为了选择有可能成为count

ID, GroupID, INFO, COUNTER 
3, 123456, INFO, 30 
2, 654321, INFO, 20 

我应该如何解决?

+0

GROUPID 123456有两个计数器21,30和两个不同的ID(1,3),你想要显示30和3吗?与654321相同,但由于ID 2上的计数器是20,它将以ID 2而不是4显示? (一个例子,如果你想要的输出将会有所帮助) – xQbert 2013-03-07 22:15:45

+0

无论如何,与GroupID配对的计数器的“正确”数量是多少?您需要使用聚合函数,例如分组。最大(计数器),最小(计数器),平均(计数器)...否则你不能确定提取的值。 – darma 2013-03-07 22:15:51

+0

我添加了正确的结果! – Skylineman 2013-03-07 22:18:43

回答

1
SELECT tablename.* FROM tablename 
    WHERE tablename.COUNTER = 
(SELECT MAX(COUNTER) FROM tablename AS f WHERE f.GroupID = tablename.GroupID) 
    ORDER BY tablename.COUNTER DESC 

编辑:这将让你COUNTER包含每个组ID的最大值完整的行,并命令由计数器递减的最终结果。

+0

只是要检查! – Skylineman 2013-03-07 22:41:40

+0

魔兽,它的工作原理。我只是无法找出它做了什么大声笑!非常感谢你的帮助! – Skylineman 2013-03-07 22:49:06

+1

它查询'tablename'中的行,但将每个COUNTER限制为等于来自同一行的'GroupID'的最大可能值。诀窍是使用表的别名'f'完成的,你应该知道这非常有用。 – darma 2013-03-07 22:53:01