簡體   English   中英

選擇不同的列以及MySQL中的其他列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM