SQL - 选择不同的只有一列

问题描述:

如何从几列中选择,但只能从其中一列选择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

请添加一些示例数据和您正在寻找的所需输出 –

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

尝试使用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在找什么。 –

我相信DISTINCT(列)需要先在你选择的名单?

+0

为什么投票下来?我在MySQL 5.6中遇到语法错误。22如果我不把DISTINCT(列)作为第一个SELECT字段。 – Andrew

+0

并且您的查询是否有效?因为它不适合我,它仍然使用所有列来评估“不同”。 – CashCow

+0

这可能不是完整的答案,但它仍然纠正了OP问题的一个方面。 OP甚至自编辑他们的帖子以包含我的建议,所以我仍然认为它没有理由反对投票。 – Andrew