2015-10-13 121 views
-3

如何從幾列中選擇,但只能從其中一列選擇DISTINCT結果?這是我現在所擁有的:SQL - 選擇不同的只有一列

SELECT DISTINCT(ur.user_by), urs.username 
    FROM 
      (SELECT * 
      FROM users 
      LIMIT 10 
     ) AS ur 
     LEFT JOIN 
      people AS urs 
     ON 
      ur.user_by = urs.username 

    LIMIT 10 

雖然,DISTINCT(user_by)不起作用。

+2

嘗試使用組。我認爲是好主意 – starko

+0

應該在哪裏添加?你介意發佈一個例子嗎?對SQL來說很新鮮。 – oliverbj

+2

請添加一些示例數據和您正在尋找的所需輸出 –

回答

2

GROUP BY urs.usernameMAX(urs.username)會給你不同的值用戶名:

SELECT ur.user_by, MAX(urs.username) AS username 
FROM 
     (SELECT * 
     FROM users 
     LIMIT 10 
    ) AS ur 
    LEFT JOIN 
     people AS urs 
    ON 
     ur.user_by = urs.username 
GROUP BY ur.user_by 
LIMIT 10; 

爲了得到不同的值,你必須使用GROUP BY與集合函數來僅選擇一個行每個組。在你的情況MAX將工作找到username,並且只爲user_by的每個組選擇一個值。


更新:

只選擇10從用戶表中是唯一的用戶,可以使用DISTINCT user_byLIMIT 10子查詢自身內部,就像這樣:通過

SELECT ur.user_by, MAX(urs.username) AS username 
FROM 
(
     SELECT DISTINCT user_by 
     FROM users 
     LIMIT 10 
) AS ur 
    LEFT JOIN 
     people AS urs 
    ON 
     ur.user_by = urs.username 
GROUP BY ur.user_by 
LIMIT 10; 
+0

如果對於ur.user_by存在示例20的「重複」值,則它將僅選擇一個用戶。例如,如果我將限制設置爲30,則會選擇下一個唯一值。我如何選擇10個獨特的用戶? – oliverbj

+0

@oliverbj我仍然認爲,正如Mahmoud Gamal在17分鐘前提出的那樣,提供樣本數據和預期的輸出將使問題更加清晰...... –

+0

@Mahmhaiud Gamal我只想從「用戶」 。如果我對10有限制,我需要10個不同的唯一值,而不是1個值(因爲相同的值出現超過10次) – oliverbj

0

嘗試使用GROUP BY

SELECT ur.expire, ur.user_by, urs.username 
    FROM 
      (SELECT * 
      FROM users 
      LIMIT 10 
     ) AS ur 
     LEFT JOIN 
      people AS urs 
     ON 
      ur.user_by = urs.username 
    GROUP BY ur.user_by, urs.username,ur.expire 
    LIMIT 10 
+1

小心解釋?我(誠實地)在沒有聚合時(使用'select DISTINCT ...'而不是OP的無效語法當然)沒有看到'DISTINCT'和'GROUP BY'之間的區別 –

+0

這個答案無效,他所做的只是將獨特的內容添加到整個子句中,這幾乎是我們知道OP不需要的唯一行爲。 –

+0

@JulienBlanchard事實上,我不知道OP在找什麼。 –

-1

我相信DISTINCT(列)需要先在你選擇的名單?

+0

爲什麼投票下來?我在MySQL 5.6中遇到語法錯誤。22如果我不把DISTINCT(列)作爲第一個SELECT字段。 – Andrew

+0

並且您的查詢是否有效?因爲它不適合我,它仍然使用所有列來評估「不同」。 – CashCow

+0

這可能不是完整的答案,但它仍然糾正了OP問題的一個方面。 OP甚至自編輯他們的帖子以包含我的建議,所以我仍然認爲它沒有理由反對投票。 – Andrew