【问题标题】:SQLite select 5 random users that have similar valuesSQLite 随机选择 5 个具有相似值的用户
【发布时间】:2021-10-29 16:14:59
【问题描述】:

所以这就是我现在所拥有的,这对于我之前需要的东西来说非常好:

SELECT hex, firewall FROM users order by RANDOM() LIMIT 5

它从数据库中随机获取 5 个用户,并让我看到十六进制和防火墙。很简单。

但是现在我想从表中获得 5 个随机用户,他们的总和(旁路器+防火墙+解密器+加密器+防病毒+垃圾邮件)的总和为 ${variable} +- 5

我还是,只需要选择防火墙和十六进制。但是,我需要随机显示的用户拥有我给它的数字的旁路器+防火墙+解密器+加密器+防病毒+垃圾邮件(范围为+-5)。例如:如果我将“6”作为 ${variable} 通过,我需要获得 5 个随机用户,其中他们的防火墙+旁路器+解密器+加密器+防病毒+垃圾邮件的总和为 6 +- 5(1 到11)

这是我的 sqlite 表的样子:

【问题讨论】:

    标签: sqlite node-sqlite3


    【解决方案1】:

    您的查询中需要一个WHERE 子句:

    SELECT hex, firewall 
    FROM users
    WHERE ABS(firewall + bypasser + decryptor + encryptor + antivirus + spam - ?) <= 5
    ORDER BY RANDOM() LIMIT 5
    

    将占位符? 替换为${variable} 的值。

    【讨论】:

      【解决方案2】:

      我通过取平均值而不是总和找到了一个更好的解决方案:

      SELECT   hex, firewall 
      FROM     users 
      WHERE    (firewall+bypasser+decryptor+encryptor+antivirus+spam) / 6 
      BETWEEN  ${userAvg - 10} 
        AND    ${userAvg + 5} 
      order by RANDOM() 
      LIMIT    5
      

      花了我一段时间,但经过一天的使用 SQL,我现在有点理解它了。我的脑袋疼。

      【讨论】:

      • 这不是一个更好的解决方案。这是针对与您提出的问题无关的不同问题的解决方案。
      猜你喜欢
      • 2021-05-02
      • 2015-04-02
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 2012-06-26
      • 2021-07-29
      相关资源
      最近更新 更多