2017-09-27 84 views
0

下令一個字段獲取不同的值,讓我們假設給定的MYSQL表結構MySQL的 - 由另一場

+----+-------+-------+ 
| id | group | count | 
+----+-------+-------+ 
| 1 | cat | 11 | 
| 2 | cat | 12 | 
| 3 | dog |  4 | 
| 4 | dog |  6 | 
| 5 | cow | 16 | 
| 6 | cow | 12 | 
+----+-------+-------+ 

我想要做的是:取每個動物羣的一個動物,由數場升序排序。在上面的例子中,輸出應該是:

| 1 | cat | 11 | 
| 3 | dog |  4 | 
| 6 | cow | 12 | 

但它比它看起來更復雜。什麼是最優化的查詢來獲得結果? (當然,做一個子查詢爲每個組是不是一個選項)

回答

0

MySQL 8.0+你可以使用ROW_NUMBER()

SELECT * 
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY `group` ORDER BY `count`) AS rn 
    FROM table_name) sub 
WHERE rn = 1; 

DBFiddle Demo

+0

@MKhalidJunaid MySQL變得現代。它將支持版本8及以上的CTE /窗口功能。 – lad2025

+0

感謝您的回答,但我想要定位的mysql版本遠遠高於;) –

2

按手動...

SELECT x.* 
    FROM my_table x 
    JOIN 
    (SELECT `group`, MIN(count) count FROM my_table GROUP BY `group`) y 
    ON y.group = x.group 
    AND y.count = x.count; 
+0

感謝您的查詢,但一個問題仍然存在:如果來自同一組的動物具有相同的計數,則需要全部。查詢應該每個組只保留一個動物。 –

+0

@AdamS哪一個? – Strawberry

+0

沒關係,標準可以是任何東西,甚至是蘭特。 –