首页 新闻 会员 周边

SQL语句理解问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-11-07 22:50
CREATE TABLE tb(Name varchar(10),Score decimal(10,2))
INSERT tb SELECT 'aa',99
UNION ALL SELECT 'bb',56
UNION ALL SELECT 'cc',56
UNION ALL SELECT 'dd',77
UNION ALL SELECT 'ee',78
UNION ALL SELECT 'ff',76
UNION ALL SELECT 'gg',78
UNION ALL SELECT 'ff',50
GO
 
--1. 名次生成方式1,Score重复时合并名次
SELECT *,Place=(SELECT COUNT(DISTINCT Score) FROM tb WHERE Score>=a.Score)
FROM tb a
ORDER BY Place
/*--结果
Name       Score        Place
---------------- ----------------- -----------
aa         99.00        1
ee         78.00        2
gg         78.00        2
dd         77.00        3
ff         76.00        4
bb         56.00        5
cc         56.00        5
ff         50.00        6
 
 
就是理解不了Place=(SELECT COUNT(DISTINCT Score) FROM tb WHERE Score>=a.Score) 这句语句 有谁能帮帮我吗
老树昏鸦的主页 老树昏鸦 | 初学一级 | 园豆:10
提问于:2012-11-07 17:20
< >
分享
最佳答案
0

每次 查询 比当条 积分大的或者等于的记录数,如果是 sql 2005,可以直接使用排名函数,更好理解

SELECT *,Place=DENSE_RANK() OVER(ORDER BY score DESC)
FROM tb a
ORDER BY Place
收获园豆:10
Qlin | 老鸟四级 |园豆:2403 | 2012-11-07 17:35
其他回答(3)
0

额,就是查score的重复次数条件是Score>=a.score

学学学习 | 园豆:427 (菜鸟二级) | 2012-11-07 17:25
0

COUNT(DISTINCT Score)  :DISTINCT Score 取出重复的Score

一起就表示去除重复Score的个数

最终结果赋值给Place

明白了吧

oppoic | 园豆:770 (小虾三级) | 2012-11-07 17:33
0

每条记录的tatalScore列与整体列totalScore比较;
     一次比较就会得出一条或多条记录,如果是一条记录就表示是第一名,
  二条记录就表示是第二名,.......... 
    但是会遇到重复数据,所以就加个DISTNCT 来抑制重复。

老树昏鸦 | 园豆:10 (初学一级) | 2012-11-07 22:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册