【问题标题】:How can a query return only one random row for each distinct column?查询如何为每个不同的列只返回一个随机行?
【发布时间】:2009-06-22 10:06:30
【问题描述】:

我有一个包含两列的表格,例如 column1 和 column2。 Column2 不是唯一的。 对于 column2 的每个不同值,我想要一个随机行,只有一行,从表中?

即我的结果集的行数应该与 column2 的不同值的数量一样多。

例如:

column1   column2
x         1
y         2
z         1

我希望结果是

column1   column2
x         1
y         2

column1   column2
z         1
y         2

这可能只使用 SQL 吗?

【问题讨论】:

    标签: distinct


    【解决方案1】:

    这个查询应该可以在 MySQL 上解决问题(在 MySQL 5 上测试):

    select a.column1, a.column2 from (select * from foo b order by rand()) a group by a.column2;
    

    【讨论】:

      【解决方案2】:

      SELECT MAX(column1), column2 FROM yourtablename GROUP BY column2

      【讨论】:

      • 对我不起作用。我相信必须有一种更复杂但更好的方法来实现它。
      • 我想要一个随机行。我认为 MAX(column1), column2 总是返回一个特定的行。
      • 嗯,你的意思是它有时应该返回 (x,1) 有时返回 (z,1)
      【解决方案3】:

      您可能想尝试ROW_NUMBER() OVER(ORDER BY column1 asc) 之类的方法来拉回您的行号并以这种方式过滤它。

      你没有提到你使用什么风格的 SQL,我从记忆中回忆了这一点 - 但这种事情在 Oracle 9 中有效。

      【讨论】:

        猜你喜欢
        • 2012-01-27
        • 2015-06-16
        • 1970-01-01
        • 2014-11-17
        • 2014-10-08
        • 1970-01-01
        • 1970-01-01
        • 2014-02-15
        • 2010-10-10
        相关资源
        最近更新 更多