如何將查詢結果進行排名

2022-02-26 17:43:14 字數 1601 閱讀 5363

於是乎我就開始寫,嘿,奇怪,我還真沒有寫過,於是找了寫資料,借鑑了一下別人的,結果如下

create procedure csp_getoperatorscorebydate

@begindate datetime,@enddate datetime

ascreate table #temp //定義臨時表,三個顯示字段

(employee varchar(50),//銷售人員的名字

totalticket int,//總票數

totaltradesum money//總銷售額

)insert into #temp 

select a.realname as employee,

totalticket=(select count(*) from tickets where datediff(dd,@begindate,ordertime)>=0 

and datediff(dd,ordertime,@enddate)>=0 and operator_id1=a.id and state<>4), 

case when (select sum(price) from tickets where datediff(dd,@begindate,ordertime)>=0 

and datediff(dd,ordertime,@enddate )>=0 and operator_id1=a.id and state<>4) is null then 0 

else (select sum(price) from tickets where datediff(dd,@begindate,ordertime)>=0 and datediff(dd,ordertime,@enddate)>=0 

and operator_id1=a.id and state<>4) end as totaltradesum from operators a  

where a.kind=1 or a.kind=3 group by a.realname,a.id order by totalticket desc

//這段**呢 有點長,也有點意思,不必去看怎麼得到的字段,但是裡面還是有些東西可以值得一看所以也就貼出來了,現在寫儲存過程沒有注意過效率,慢慢來。

//一下就是實現名次了,之所以使用臨時表,就是為了將需要的字段放到乙個臨時表中,便於簡單操作

select employee,totalticket,totaltradesum,

(select count(*)+1 as [order] from #temp b where b.totalticket > a.totalticket) as [order] from #temp a 

order by totalticket desc

好 關鍵的句子來了,select count(*)+1 as [order] from #temp b where b.totalticket > a.totalticket,這句語句我曾經開始的時候也不是很懂,就是我們群裡開始問,結果很多人還是解釋不清楚,結果另乙個群的乙個人給我說喊我考慮成迴圈來理解,我就想了想,原來是將同乙個表考慮成兩個表將字段的值來進行一次比較,並對符合條件的結果查詢出來——count(*)+1,此處的加1是為了避免第一名的序號為零。

好,完了

oracle對查詢結果進行排名

要解決的問題 我們想對查詢出來的資料進行排名統計,但又不想在源資料中插入相應的字段。解決方法 color red 以oracle中scott使用者下的emp表為例演示 color 對所有員工的工資進行統計排名,查詢語句如下 select empno,sal,color red rank over o...

如何將介面進行限流

採用計數器實現限流有點簡單粗暴,一般我們會限 制一秒鐘的能夠通過的請求數,比如限流qps為100,演算法的實現思路就是從第乙個請求進來開始計時,在接下去的1s內,每來乙個請求,就把計數加1,如果累加的數字達到了100,那麼後續的請求就會被全部拒絕。等到1s結束後,把計數恢復成0,重新開始計數。具體的...

MSSQL如何將查詢結果拼接成字串

在博問上看到乙個提問 mssql如何將查詢結果拼接成字串 想了一下應該怎麼實現呢,在c 等語言下好實現,但在sql裡實現 還真沒做過。目標 想要在sql中將查詢的結果拼接為 1 2 3 4 5 分析 要進行拼接就要取得每行的值,想到了游標可以做到。於是有了下面的方法 select name from...