原文:在论坛中出现的比较难的sql问题:23(随机填充问题)


最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。

所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。

1、一段SQL的写法,求方法!

http://bbs.csdn.net/topics/390705441

select * from k11  有10條紀錄

files1  files2  files3  files4

AA        BB     CC       DD

ZZ        EE     TT       YY

NN        MM     GG       UU

另外一个表User 有99条记录,现在要随机在User这个表里面随机选3条记录

select top 3 NewID() as random,[UserId] from [User]

random          UserId

E81A4DBB ming

F31B3B6C ling

16574317 Ting

将User这个表上的UserId值结果平均分配到k11上面那个表上,最后結果顯示如下

files1  files2  files3  files4  UserId

A1        BB     CC       DD     ming

A2        EE     TT       YY     ling

A3        MM     GG       UU     ling

A4        XX     XX       XX     ming

A5        XX     XX       XX     ling

A6        XX     XX       XX     Ting

A7        XX     XX       XX     ming

A8        XX     XX       XX     ling

A9        XX     XX       XX     ling

A10       XX     XX       XX     ming

sql代码:


  1. create table k11(
  2. files1 varchar(10),
  3. files2 varchar(10),
  4. files3 varchar(10),
  5. files4 varchar(10),
  6. UserId varchar(10))
  7. insert into k11
  8. select 'A1', 'BB', 'CC', 'DD', 'ming' union all
  9. select 'A2', 'EE', 'TT', 'YY', 'ling' union all
  10. select 'A3', 'MM', 'GG', 'UU', 'Ting' union all
  11. select 'A4', 'XX', 'XX', 'XX', 'ming' union all
  12. select 'A5', 'XX', 'XX', 'XX', 'ling' union all
  13. select 'A6', 'XX', 'XX', 'XX', 'Ting' union all
  14. select 'A7', 'XX', 'XX', 'XX', 'ming' union all
  15. select 'A8', 'XX', 'XX', 'XX', 'ling' union all
  16. select 'A9', 'XX', 'XX', 'XX', 'Ting' union all
  17. select 'A10', 'XX', 'XX', 'XX', 'ming'
  18. create table [user]
  19. (
  20. UserId varchar(10)
  21. )
  22. insert into [user]
  23. select 'ming' union all
  24. select 'ling' union all
  25. select 'Ting'
  26. go
  27. ;with t
  28. as
  29. (
  30. select [UserId],
  31. ROW_NUMBER() over(order by newid()) as rownum
  32. from [User]
  33. ),
  34. tt
  35. as
  36. (
  37. select *,
  38. case when rownum1 %3 =0 then 3 else rownum1 %3 end as rownum
  39. from
  40. (
  41. select *,
  42. ROW_NUMBER() over(order by getdate()) as rownum1
  43. from k11
  44. )a
  45. )
  46. select tt.files1,tt.files2,tt.files3,tt.files4,t.UserId
  47. from tt
  48. left join t
  49. on tt.rownum = t.rownum
  50. and t.rownum <=3
  51. /*
  52. files1 files2 files3 files4 UserId
  53. A1 BB CC DD ming
  54. A2 EE TT YY ling
  55. A3 MM GG UU Ting
  56. A4 XX XX XX ming
  57. A5 XX XX XX ling
  58. A6 XX XX XX Ting
  59. A7 XX XX XX ming
  60. A8 XX XX XX ling
  61. A9 XX XX XX Ting
  62. A10 XX XX XX ming
  63. */

2、随机返回100条数据:

如果表比较大,有上千万的数据,那么通过如下的代码,可以随机返回100条数据,这里的随机,不是真正意义上的随机,但确实能让人感觉是随机,也就是每次返回的数据都不一样,最关键的是速度非常快,接近于0秒,只消耗了 62毫秒。


  1. select *
  2. from
  3. (
  4. select *,
  5. ROW_NUMBER() over(order by @@servername) as rownum
  6. from dbo.xxx
  7. )t
  8. where rownum between CHECKSUM(getdate()) % 10000 and CHECKSUM(getdate()) % 10000+99
SQL Server 分析和编译时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 (100 行受影响) SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 62 毫秒。

发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

在论坛中出现的比较难的sql问题:23(随机填充问题)的更多相关文章

  1. 在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)

    原文:在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

  2. 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)

    原文:在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时.分钟计算问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. ...

  3. 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)

    原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...

  4. 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)

    原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  5. 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)

    原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  6. 在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存)

    原文:在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

  7. 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)

    原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...

  8. 在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题)

    原文:在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...

  9. 在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名)

    原文:在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  10. 在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串)

    原文:在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

随机推荐

  1. 【Java文件】按UTF-8编码读取文本文件(逐行方式),排序,打印到控制台

    代码: package findJavaMemberFunction; import java.io.BufferedReader; import java.io.FileInputStream; i ...

  2. 负载均衡服务TCP端口健康检查成功,为什么在后端业务日志中出现网络连接异常信息?

    负载均衡服务TCP端口健康检查成功,为什么在后端业务日志中出现网络连接异常信息? 原文: https://help.aliyun.com/document_detail/127193.html?spm ...

  3. flutter 保持页面状态

    import 'package:flutter/material.dart'; import 'KeepAliveDemo.dart'; void main() => runApp(MyApp( ...

  4. kubernetes 亲和性调度详解

    文章目录 1 概述: 2 场景一:调度到一组具有相同特性的主机上(label+nodeSelector) 3 场景二:部署的应用不想调度到某些节点上(nodeaffinity) 4 场景三:部署的应用 ...

  5. idea-debug启动会卡住不动,BeanPostProcessors (for example: not eligible for auto-proxying),报错解决

    debug启动会卡住不动,run模式启动正常 debug启动输出到下面这行之后,就不会继续输出了 爆出各种 [INFO]- Bean 'dataSource' of type [class Druid ...

  6. [ kvm ] 嵌套虚拟化

    1. 前言 在学习 kvm 的过程中,需要在虚拟机中再次开启虚拟机,这里就需要使用到嵌套虚拟化,做个记录吧. 2. 配置嵌套虚拟化 2.1 查看物理机是否支持嵌套虚拟化 cat /sys/module ...

  7. vue-cli3 按需加载loading,服务的方式调用

    安装 babel-plugin-component npm install babel-plugin-component -S 安装element-ui npm install element-ui ...

  8. Cas(03)——Cas Server中各配置文件介绍

    Cas Server中各配置文件介绍 Cas Server中所有的配置文件都是放在WEB-INF目录及其子目录下的. 在WEB-INF/classes下的配置文件有: l  cas-theme-def ...

  9. python signal模块

    signal包负责在Python程序内部处理信号,典型的操作包括预设信号处理函数,暂 停并等待信号,以及定时发出SIGALRM等.要注意,signal包主要是针对UNIX平台(比如Linux, MAC ...

  10. Linux awk+uniq+sort 统计文件中某字符串出现次数并排序

    https://blog.csdn.net/qq_28766327/article/details/78069989 在服务器开发中,我们经常会写入大量的日志文件.有时候我们需要对这些日志文件进行统计 ...