【问题标题】:Delete 75% Of a Table Randomly随机删除表的 75%
【发布时间】:2014-01-19 01:01:01
【问题描述】:

尝试创建一个较小的示例数据库,但仍让数据在一定程度上具有统计相关性。如何从表中删除 x % 的行?一直在玩 NEWID() 函数。

【问题讨论】:

    标签: sql-server sql-server-2012


    【解决方案1】:
    DELETE 
    FROM TABLE_NAME
    WHERE PK IN (SELECT TOP (75) PRECENT PK
                 FROM TABLE_NAME
                 ORDER BY NEWID())
    

    马丁·史密斯的建议

    DELETE T 
    FROM (SELECT TOP (75) PERCENT * 
          FROM TABLE_NAME 
          ORDER BY NEWID()) T
    

    【讨论】:

    • 我在胡闹,不知道百分比函数!谢谢会在我可以标记的时候标记
    • 没问题,很高兴它有帮助:)
    • DELETE T FROM (SELECT TOP (75) PERCENT * FROM TABLE_NAME ORDER BY NEWID()) T 会更有效率。
    【解决方案2】:

    另一种方法是:

    DELETE 
    FROM table_name
    WHERE ABS(CHECKSUM(NEWID())) % 100 < 75 ;
    

    不会准确删除 75% 的行,但对于更大的表会更快,因为它不需要进行排序。

    【讨论】:

      【解决方案3】:

      我在 Azure SQL 数据库上的工作示例(大多数语法与 SQLServer 兼容):

      delete TOP (75) PERCENT 
      FROM outer_sources.del_me_tbl
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-04
        • 1970-01-01
        • 2015-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多