数据库存储过程实验报告

  • 格式: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

输出结果:

第一组 第二组