[英]Select distinct column along with some other columns in MySQL
我似乎無法為以下(可能是一個古老的)問題找到合適的解決方案,所以希望有人可以解決一些問題。 我需要在mySQL中返回1個不同的列以及其他非不同列。
我在mySQL中有以下表:
id name destination rating country
----------------------------------------------------
1 James Barbados 5 WI
2 Andrew Antigua 6 WI
3 James Barbados 3 WI
4 Declan Trinidad 2 WI
5 Steve Barbados 4 WI
6 Declan Trinidad 3 WI
我希望SQL語句返回DISTINCT名稱以及目的地,基於國家/地區的評級。
id name destination rating country
----------------------------------------------------
1 James Barbados 5 WI
2 Andrew Antigua 6 WI
4 Declan Trinidad 2 WI
5 Steve Barbados 4 WI
正如你所看到的,詹姆斯和德克蘭有不同的評級,但名稱相同,所以他們只返回一次。
以下查詢返回所有行,因為評級不同。 無論如何我可以返回上面的結果集嗎?
SELECT (distinct name), destination, rating
FROM table
WHERE country = 'WI'
ORDER BY id
使用子查詢,您可以獲得每個名稱的最高id
,然后根據以下內容選擇其余行:
SELECT * FROM table
WHERE id IN (
SELECT MAX(id) FROM table GROUP BY name
)
如果您願意,可以使用MIN(id)
獲取每個名稱的第一條記錄,而不是最后一條記錄。
它也可以通過針對子查詢的INNER JOIN
來完成。 為此,性能應該類似,有時您需要從子查詢中連接兩列。
SELECT
table.*
FROM
table
INNER JOIN (
SELECT MAX(id) AS id FROM table GROUP BY name
) maxid ON table.id = maxid.id
問題在於整個回歸集中的不同作用而不僅僅是第一個字段。 否則MySQL不知道要返回什么記錄。 因此,您希望在評級上具有某種組功能,無論是MAX,MIN,GROUP_CONCAT,AVG還是其他幾種功能。
Michael已經發布了一個很好的答案,所以我不打算重新編寫查詢。
你可以group by
以下方式進行group by
:
select min(id) as id, name, destination, avg(rating) as rating, country from TABLE_NAME group by name, destination, country
我同意@rcdmk。 field and only a few rows will reach the server. 使用DEPENDENT子查詢可能會導致性能下降,如果已經INDEXed 字段且只有幾行將到達服務器,則GROUP BY似乎更合適。 通過@rcdmk重寫查詢giben,我添加了ORDER BY NULL子句來抑制GROUP BY的隱式排序,使其更快一些:
SELECT MIN(id) as id, name, destination as rating, country
FROM table WHERE country = 'WI'
GROUP BY name, destination ORDER BY NULL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.