热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。

最近,在论坛中,遇到了不少比较难的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
E81A4DBBming
F31B3B6Cling
16574317Ting

将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代码:

 

create table k11(
files1 varchar(10),  
files2 varchar(10), 
files3 varchar(10), 
files4 varchar(10), 
UserId varchar(10))

insert into k11
select 'A1',        'BB',     'CC',      'DD',     'ming' union all
select 'A2',        'EE',     'TT',       'YY',     'ling' union all
select 'A3',        'MM',     'GG',       'UU',     'Ting' union all
select 'A4',        'XX',     'XX',       'XX',     'ming' union all
select 'A5',        'XX',     'XX',       'XX',     'ling' union all
select 'A6',        'XX',     'XX',      'XX',     'Ting' union all
select 'A7',        'XX',     'XX',      'XX',     'ming' union all
select 'A8',        'XX',     'XX',       'XX',     'ling' union all
select 'A9',        'XX',     'XX',       'XX',     'Ting' union all
select 'A10',       'XX',     'XX',       'XX',     'ming'


create table [user]
(
UserId varchar(10)
)

insert into [user]
select 'ming' union all
select 'ling' union all
select 'Ting'
go


;with t
as
(
select [UserId],
       ROW_NUMBER() over(order by newid()) as rownum
from [User]
),

tt
as
(
select *,
       case when rownum1 %3 =0 then 3 else rownum1 %3 end as rownum
from 
(
	select *,
		   ROW_NUMBER() over(order by getdate()) as rownum1
	from k11
)a
)

select tt.files1,tt.files2,tt.files3,tt.files4,t.UserId
from tt
left join t
        on tt.rownum = t.rownum
           and t.rownum <=3
/*
files1	files2	files3	files4	UserId
A1	BB	CC	DD	ming
A2	EE	TT	YY	ling
A3	MM	GG	UU	Ting
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	Ting
A10	XX	XX	XX	ming
*/

 

2、随机返回100条数据:

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

 

select *
from 
(
select *,
       ROW_NUMBER() over(order by @@servername) as rownum
from dbo.xxx
)t
where rownum between CHECKSUM(getdate()) % 10000 and CHECKSUM(getdate()) % 10000+99

 


 

SQL Server 分析和编译时间: 
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

(100 行受影响)

 SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 62 毫秒。


 


推荐阅读
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Givenasinglylinkedlist,returnarandomnode'svaluefromthelinkedlist.Eachnodemusthavethe s ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
author-avatar
欣然沐羽民_699
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有