由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - 有包子!sql procedure 来rank不同table里面的数据
相关主题
求助:如何ColumName 作为变量放入queryCommon Table Expression 问题
请教set和select 的区别最近写了不少SQL script,请大牛评价下属于什么水平
error of executing SQL query of string concatenation (转载SQL combine two tables into one table and add a new column
mysql 问题 (转载)another question--怎么delete a row from a table
请问这个query怎么做SQL问题请教: add one more column
how to write this query请教一个query in mysql
Access 里面两个 column不一样的table 能combine 到一起吗?SQL add some columns into a table from another table (转载
在没有Key的情况下,怎么update一个table的内容到另一个table?一个有关查询的语句
相关话题的讨论汇总
话题: table话题: rank话题: rnk话题: variable话题: varchar
进入Database版参与讨论
1 (共1页)
k**g
发帖数: 1558
1
建立一个自己的procedure用来rank不同table里面的数据
Create Procedure ASCRanking
@variable varchar(20),
@Rnk_variable varchar(20),
@tablename varchar(50),
@numberofcategory varchar(5),
@Partition varchar(50)
As
Declare @sql1 varchar(200)
Declare @sql2 varchar(200)
BEGIN
set @sql1='Alter Table '+@tablename+'Add '+@Rnk_variable+' real'
EXEC(@sql1)
--set @sql2='Update '+@tablename+
--' Set '+@Rnk_variable+'=NTILE('+@numberofcategory+') OVER(PARTITION BY '+@
Partition+' ORDER BY '+@variable+' ASC)'
--EXEC(@sql2)
END
在运行的时候
Exec ASCRanking
@variable='PB',
@Rnk_variable='Rnk_PB1',
@tablename='#Temp1',
@numberofcategory='100',
@Partition='Date,Region'
出现的错误信息是
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'Rnk_PB1'.
大家看看怎么解决这个问题?谢谢!
g***l
发帖数: 18555
2
为什么不把TABLE COMBINE在一起再RANK么,RANK本来就是个FUNCTION,你那个ALTER
TABLE看着就吓人
k**g
发帖数: 1558
3
因为我要rank 100个variable,如果一起rank的话,花时间远比100*单个rank的长。所
以想写个stored procedure.
包子以发!
g***l
发帖数: 18555
4
我还是没搞懂你想干什么,什么叫rank不同table里面的数据,你举个列子好不好,我
觉得你这个SP本身问题就很大,你有多少TABLE要RANK,RANK完了放在哪里?总不能就
扔在MANAGEMENT STUDIO里再COPY出来吧。为什么不能COMBINE呢
无非是这样么,RANK然后GROUP BY TABLENAME不就行了,这样就避免了有多少TABLE,
RANK出来放在哪里的问题。
TABLENAME DATA RANK
TABLE1 XXXX RANK
TABLE1 XXXX2 RANK
TABLE2 XXXX RANK
TABLE2 XXXX2 RANK
k**g
发帖数: 1558
5
我要rank table1里的100 variables,结果存在table1里面,
接下来要rank table2里的同样的variables,结果存在table2里面,依次类推。。。

【在 g***l 的大作中提到】
: 我还是没搞懂你想干什么,什么叫rank不同table里面的数据,你举个列子好不好,我
: 觉得你这个SP本身问题就很大,你有多少TABLE要RANK,RANK完了放在哪里?总不能就
: 扔在MANAGEMENT STUDIO里再COPY出来吧。为什么不能COMBINE呢
: 无非是这样么,RANK然后GROUP BY TABLENAME不就行了,这样就避免了有多少TABLE,
: RANK出来放在哪里的问题。
: TABLENAME DATA RANK
: TABLE1 XXXX RANK
: TABLE1 XXXX2 RANK
: TABLE2 XXXX RANK
: TABLE2 XXXX2 RANK

g***l
发帖数: 18555
6
那不就是个TABLE UPDATE的问题么?TABLE里没有RANK COLUMN给你吧,你如果还要去
ALTER TABLE的话,那你这个SP就很外行了,原则是不让你改TABLE,你弄个TEMP TABLE
,RANK完一个放进去,TABLENAME也做成个COLUMN,然后RANK第二个再放进去,最后一次
性显示出来。如果你去ALTER TABLE的话,RUN两次在同一个TABLE加同样的COLUMN当然
会出错,这种做法也很不专业。

【在 k**g 的大作中提到】
: 我要rank table1里的100 variables,结果存在table1里面,
: 接下来要rank table2里的同样的variables,结果存在table2里面,依次类推。。。

k**g
发帖数: 1558
7
但是我在SP里面先Alter Table '+@tablename+' Add '+@Rnk_variable+' real',然后
再update那个@Rnk_variable的column,和你说的没有什么差别吧?

TABLE

【在 g***l 的大作中提到】
: 那不就是个TABLE UPDATE的问题么?TABLE里没有RANK COLUMN给你吧,你如果还要去
: ALTER TABLE的话,那你这个SP就很外行了,原则是不让你改TABLE,你弄个TEMP TABLE
: ,RANK完一个放进去,TABLENAME也做成个COLUMN,然后RANK第二个再放进去,最后一次
: 性显示出来。如果你去ALTER TABLE的话,RUN两次在同一个TABLE加同样的COLUMN当然
: 会出错,这种做法也很不专业。

g***l
发帖数: 18555
8
PRODUCTION的TABLE你怎么可能随意乱改呢,SP的PERMISSION一般不允许ALTER TABLE,
这种野鸡SP在公司会让人笑话死的,你的思路要变一变。

【在 k**g 的大作中提到】
: 但是我在SP里面先Alter Table '+@tablename+' Add '+@Rnk_variable+' real',然后
: 再update那个@Rnk_variable的column,和你说的没有什么差别吧?
:
: TABLE

k**g
发帖数: 1558
9
问题是这个不是production的table,我的SP的Permission可以alter table, 只是
update table的时候出错。你知道我的syntax错在哪里了吗?
我承认我们公司的sql就是野鸡,但是只要让我完成这个rank就行了,我们也没有复杂
的数据库。

【在 g***l 的大作中提到】
: PRODUCTION的TABLE你怎么可能随意乱改呢,SP的PERMISSION一般不允许ALTER TABLE,
: 这种野鸡SP在公司会让人笑话死的,你的思路要变一变。

g***l
发帖数: 18555
10
因为 UPDATE SET STH=RANK就不行,RANK本来就要对TABLE进行排序,必须放在一个
TEMP TABLE里再JOIN回来
相关主题
how to write this queryCommon Table Expression 问题
Access 里面两个 column不一样的table 能combine 到一起吗?最近写了不少SQL script,请大牛评价下属于什么水平
在没有Key的情况下,怎么update一个table的内容到另一个table?SQL combine two tables into one table and add a new column
进入Database版参与讨论
g***l
发帖数: 18555
11
应该还有一个JOIN,看我的列子
Once the RANKING column contains the correct values, we can slide the
values into column B, then drop the RANKING column.
ALTER TABLE
TEST
ADD (
RANKING NUMBER);
Putting the values into the RANKING column is a bit challenging, unless
we use inline views:
UPDATE
TEST T1
SET
RANKING=(
SELECT
RANKING
FROM
(SELECT
A,
B,
RANK() OVER (ORDER BY A,B) RANKING
FROM
TEST) T2
WHERE
T1.A=T2.A
AND T1.B=T2.B);
k**g
发帖数: 1558
12
明白了,谢谢!再给个包子。
顺便问问,怎么写个winsorize的query,就是5 percentile以下的用5 percentile的值
,超过95 percentile的用95 percentile的值?
g***l
发帖数: 18555
13
winsorize这个不会,这不是统计学里的东西么,EXCEL或者SAS,SQL不做统计,需要另
外的TOOL
i****a
发帖数: 36252
14
Print @sql
And the try to execute that. You'll see where the error is.

[发表自未名空间手机版 - m.mitbbs.com]

【在 k**g 的大作中提到】
: 建立一个自己的procedure用来rank不同table里面的数据
: Create Procedure ASCRanking
: @variable varchar(20),
: @Rnk_variable varchar(20),
: @tablename varchar(50),
: @numberofcategory varchar(5),
: @Partition varchar(50)
: As
: Declare @sql1 varchar(200)
: Declare @sql2 varchar(200)

k********e
发帖数: 702
15
你在数据那里用case when xxx<=5 then 5 else 95 end 这种if语句不就行了么

【在 k**g 的大作中提到】
: 明白了,谢谢!再给个包子。
: 顺便问问,怎么写个winsorize的query,就是5 percentile以下的用5 percentile的值
: ,超过95 percentile的用95 percentile的值?

g***l
发帖数: 18555
16
要先RANK一下吧,然后RANK*100/TOTAL COUNT

【在 k********e 的大作中提到】
: 你在数据那里用case when xxx<=5 then 5 else 95 end 这种if语句不就行了么
k**g
发帖数: 1558
17
因为有数据是一样的,所以应该用row number*100/total row number, 找出5和95
percentile,然后winsorize <5% and >95%

【在 g***l 的大作中提到】
: 要先RANK一下吧,然后RANK*100/TOTAL COUNT
k********e
发帖数: 702
18
是不是啊?
嫩的头像很诱人啊

【在 g***l 的大作中提到】
: 要先RANK一下吧,然后RANK*100/TOTAL COUNT
k**g
发帖数: 1558
19
我用了这个例子,结果rank一个variable,花了33分钟。如果我用以下的只要花10秒,
问题是我有90个variable,如果用以下的然后再join 90个temp table,也要花很长时间
。有什么省时间的方法啊?
select *,
NTILE(100) OVER(PARTITION BY Date,Region ORDER BY PB ASC) AS Rnk_PB2
into #Temp2
From #temp1

【在 g***l 的大作中提到】
: 应该还有一个JOIN,看我的列子
: Once the RANKING column contains the correct values, we can slide the
: values into column B, then drop the RANKING column.
: ALTER TABLE
: TEST
: ADD (
: RANKING NUMBER);
: Putting the values into the RANKING column is a bit challenging, unless
: we use inline views:
: UPDATE

g***l
发帖数: 18555
20
你一个TABLE里有多少数据啊,有INDEX么?



【在 k**g 的大作中提到】
: 我用了这个例子,结果rank一个variable,花了33分钟。如果我用以下的只要花10秒,
: 问题是我有90个variable,如果用以下的然后再join 90个temp table,也要花很长时间
: 。有什么省时间的方法啊?
: select *,
: NTILE(100) OVER(PARTITION BY Date,Region ORDER BY PB ASC) AS Rnk_PB2
: into #Temp2
: From #temp1

k**g
发帖数: 1558
21
有阿, 1.6 million row的数据,200个column

【在 g***l 的大作中提到】
: 你一个TABLE里有多少数据啊,有INDEX么?
:
: ,

1 (共1页)
进入Database版参与讨论
相关主题
一个有关查询的语句请问这个query怎么做
SQL question...how to write this query
SQL question: update a fieldAccess 里面两个 column不一样的table 能combine 到一起吗?
请教一个oracle下的view的问题在没有Key的情况下,怎么update一个table的内容到另一个table?
求助:如何ColumName 作为变量放入queryCommon Table Expression 问题
请教set和select 的区别最近写了不少SQL script,请大牛评价下属于什么水平
error of executing SQL query of string concatenation (转载SQL combine two tables into one table and add a new column
mysql 问题 (转载)another question--怎么delete a row from a table
相关话题的讨论汇总
话题: table话题: rank话题: rnk话题: variable话题: varchar