2010-05-03 54 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