2010-05-03 55 views
1

嗨,我有一个表如下身份证,学校,地址,城市,州,电话,电子邮件,传真。有近40个城市。我需要从每个城市选择1项。任何一个可以指导我mysql查询此问题

例如

city 

a1  30 entries 

a2  12 entries 

...... 
a40 36 entries 

Pick 1 from each a1,a40 
+2

你想用什么标准选择每个城市的哪个入口? – Syntactic 2010-05-03 12:48:39

+1

同一个城市的大多数条目是否具有相同的状态?你能详细说明一下吗? – Syntactic 2010-05-03 12:56:24

+0

好吧,以前10个州各有5-6个城市。我只需要从每个城市中选择一个条目(每个城市严格不超过1个,从50到100个条目)。 – ArK 2010-05-03 13:03:34

回答

2
select * 
    from table_name 
where id in ( select MAX(id) 
        from table_name 
       group by city 
      ) 
+1

为什么会得到一个反对票?叹气..有点粗俗但看起来应该可行! – lexu 2010-05-03 13:09:50

+0

是的,我同意@lexu – Aditya 2010-05-03 13:21:48

+0

刚刚删除了我的downvote,它以前是无效的语法。 – Michael 2010-05-03 15:28:13

0
select * from your_table_name group by state, city 

,并随机选择

select * from your_table_name group by state, city order by rand() 
+0

在** mysql **这是最简单和最短的问题的答案。 +1来对付downvoter(s)! – knittl 2010-05-03 14:22:29

0

在MySQL中,你可以简单地说:

select * from table group by city 
+0

我不认为这是一个好主意:http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html – 2010-05-03 12:53:18

+0

@mark byers:那么问题在哪里?该页面讨论标准的sql。我清楚地表明我在谈论mysql和mysql中的afaik,可以选择不汇总它们的列。你得到的行是未指定的,但你得到的值... – knittl 2010-05-03 13:42:41

+0

它说有“使用此功能时,每个组中的所有行应该具有相同的值从GROUP BY部分省略的列。这里情况不同。 – 2010-05-03 13:46:56

4

总的来说,我喜欢来处理这些案件有一个加入一个子查询,如下面的例子:

SELECT s.id, s.school, s.address, s.city, s.phone, s.email, s.fax 
FROM  schools s 
JOIN  (SELECT MAX(id) as max_id 
      FROM  schools 
      GROUP BY city) sub_s ON (sub_s.max_id = s.id); 

JOIN实际上是限制你的结果设定为具有鲜明的城市条目。这也假设您想在每个城市有多个条目时选择ID最高的条目。如果您希望选择最低的ID,则可以在子查询中使用MIN()聚合函数,而不是MAX()

+0

+1的解释,价值比单独查询更多。 – lexu 2010-05-03 14:03:13