【问题标题】:How to order by random in SQL with Google Sheets?如何使用 Google 表格在 SQL 中随机排序?
【发布时间】:2020-01-24 03:55:46
【问题描述】:

我必须使用查询语言 SQL 在 Google 表格中选择结果。

我想随机订购,但找不到有效的功能。

我用这个:

Select E limit 3 sort by random()

文档: https://developers.google.com/chart/interactive/docs/querylanguage

有人知道怎么做吗?

【问题讨论】:

  • 我在该文档中找不到Random()。你确定 querylangunge 支持吗?
  • 你说得对,我没找到。所以我想知道该怎么做。
  • 我不知道,我从未使用过这个 queryLanguage。它很像 SQL,但我猜它仍然有一些不同的地方。也许其他人可以提供比我更多的帮助。

标签: sorting google-sheets google-sheets-formula array-formulas google-sheets-query


【解决方案1】:
=QUERY(#DATA_RANGE,CONCATENATE("SELECT A LIMIT 1 OFFSET ", RANDBETWEEN(0,COUNTA(#COLUMN_RANGE)-1)),-1)

根据需要填写#DATA_RANGE#COLUMN_RANGE

例如:

=QUERY(A2:B8,CONCATENATE("SELECT A LIMIT 1 OFFSET ", RANDBETWEEN(0,COUNTA(A2:A8)-1)),-1)

【讨论】:

    【解决方案2】:

    像这样:

    =ARRAYFORMULA(QUERY({RANDBETWEEN(ROW(A:A), 99^99), A:E}, 
     "select Col6 where Col6 is not null order by Col1 limit 3", 0))
    

    【讨论】:

    • 好的,但选择的结果将始终相同。我希望对每个查询都有一个随机答案
    • 您不应该使用 ROWS 并现在使用 ROW 吗? ROW(A:A) 始终返回 1。 ROWS(A:A) 实际上是您的行数。还有为什么是 99^99? RANDBETWEEN(0, ROWS(A:A)) 不是更好吗?
    • @JeffreyVanAlstine 是的,独立 =ROW(A:A) 将输出 1 但与 =ARRAYFORMULA(ROW(A:A)) 结合将输出每一行。使用 99^99 只是因为它比 ROWS(A:A) 短……答案是很久以前发布的。现在我会回答:i.stack.imgur.com/f6ifK.png
    【解决方案3】:

    以下是我找到的解决方案:

    首先,将仅包含 =RAND() 的列添加到您的数据集中。 其次,在您的 QUERY 中包含并按列排序。无需实际选择或显示随机数。

    例如=query(A:B, 'select A order by B') 假设 A 是您的数据集,B =RAND();

    或者,您可以通过编程将一组随机数附加到您的数据集。像这样组合数组将您的列重命名为 COLX,这只是一个麻烦,其中 X 是更清晰的 A/B/C/Whatever 中的列的顺序。

    例如=query({A:A, RANDARRAY(ROWS(A:A))}, '按 COL2 选择 COL1 订单')

    第三种可行的方法是添加 =SORT(A:A, RANDARRAY(ROWS('Using Sort Part A'!A2:A), 1), TRUE)。但是,此解决方案的一个问题是它会生成每个列的随机数,无论它是否已填写并将其包含在我们的数据集中。您可以巧妙地使用 FILTER 和 ISTEXT 来解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 2012-08-04
      • 2020-03-04
      相关资源
      最近更新 更多