数据库存储过程实验报告
- 格式:docx
- 大小:110.22 KB
- 文档页数:3
实验12
一、 导入数据
二、编写存储过程:
create proc cluster_kmeans
as
set nocount on
declare @pointX1 numeric(10,6)
declare @pointY1 numeric(10,6)
declare @pointX2 numeric(10,6)
declare @pointY2 numeric(10,6)
select top 1 @pointX1=X,@pointY1=Y
from dataset
select top 1 @pointX2=X,@pointY2=Y
from dataset where X <> @pointX1 or Y <> @pointY1 declare @t1 table(
pointX numeric(10,6),
pointY numeric(10,6)
)
declare @t2 table(
pointX numeric(10,6),
pointY numeric(10,6)
)
insert @t1
select*
from dataset
where power(@pointX1-X,2)+power(@pointY1-Y,2) insert @t2 select* from dataset where power(@pointX1-X,2)+power(@pointY1-Y,2)>=power(@pointX2-X,2)+power(@pointY2-Y,) select @pointX1=avg(pointX), @pointY1=avg(pointY) from @t1 select @pointX2=avg(pointX), @pointY2=avg(pointY) from @t2 while exists ( select 1 from @t1 where power(@pointX1-pointX,2)+power(@pointY1-pointY,2)>power(@pointX2-pointX,2)+power(@pointY2-pointY,2) ) or exists ( select 1 from @t2 where power(@pointX1-pointX,2)+power(@pointY1-pointY,2) begin delete @t1 delete @t2 insert @t1 select * from dataset where power(@pointX1-X,2)+power(@pointY1-Y,2) select * from dataset where power(@pointX1-X,2)+power(@pointY1-Y,2)>=power(@pointX2-X,2)+power(@pointY2-Y,) select @pointX1=avg(pointX), @pointY1=avg(pointY) from @t1 select @pointX2=avg(pointX), @pointY2=avg(pointY) from @t2 end --输出结果 select @pointX1 as X1, @pointY1 as Y1 select * from @t1 select @pointX2 as X2, @pointY2 as Y2 select * from @t2 go --调用 exec cluster_kmeans 输出结果: 第一组 第二组