谁帮我解释下这个语句

qq_liang 2007-08-21 05:56:27
SELECT (SELECT COUNT(ID2)
FROM ttttt b
WHERE (a.id = b.id) AND (a.ID2 >= b.ID2)) AS orderid, *
FROM ttttt a
ttttt数据是这样的
id2 id valu
1 c1 0
2 c2 1
3 c3 20
4 c1 10
5 c2 11
6 c3 12
语句执行结果是这样的
orderid id2 id valu
1 1 c1 0
1 2 c2 1
1 3 c3 20
2 4 c1 10
2 5 c2 11
2 6 c3 12
orderid的内容谁帮我解释下为什么是这个结果
...全文
259 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuifengde 2007-08-28
  • 打赏
  • 举报
回复
我的技术社区---->修改我的社区信息
qq_liang 2007-08-28
  • 打赏
  • 举报
回复
前台程序也可以啊,不知道怎么写。。能给个例子吗学习一下
qq_liang 2007-08-28
  • 打赏
  • 举报
回复
请教一下,用户id后面括号里的怎么修改,比如我的是肉肉,shuifengde是树上的鸟儿,在哪里修改
yrwx001 2007-08-24
  • 打赏
  • 举报
回复
多谢大家,我有点明白了,把ttttt看成两个相同的表就明白了,,唉基础知识不过关阿
另外:请问ytwx001,,count函数里的值在这里代表什么呢,好像改成任意数字也不会影响结果呀。
-------------------------------------------------------------------------------
count 裡面的值是不影響結果


SELECT COUNT(1)
FROM ttttt b
WHERE (b.id = a.id) AND (b.id2 <= a.id2)
这个语句单独执行,通不过的啊,a没有定义吧
---------------------------------------------------
不能單獨執行
qq_liang 2007-08-24
  • 打赏
  • 举报
回复
问一个不相干的问题,大家的id后面括号里的内容,从哪里修改阿
qq_liang 2007-08-24
  • 打赏
  • 举报
回复
SELECT COUNT(1)
FROM ttttt b
WHERE (b.id = a.id) AND (b.id2 <= a.id2)
这个语句单独执行,通不过的啊,a没有定义吧
qq_liang 2007-08-24
  • 打赏
  • 举报
回复
多谢大家,我有点明白了,把ttttt看成两个相同的表就明白了,,唉基础知识不过关阿
另外:请问ytwx001,,count函数里的值在这里代表什么呢,好像改成任意数字也不会影响结果呀。
chuifengde 2007-08-24
  • 打赏
  • 举报
回复
你假设有一个行指针,当指向ttttt a的第一行(1,c1,0)时,这时
(SELECT COUNT(ID2) FROM ttttt b WHERE (a.id = b.id) AND (a.ID2 >= b.ID2)) AS orderid
这条语句得出的结果就是1,因为ttttt b表所有的记录中id与a中的第一行id(c1)相等的有两条(1,c1, 0)和(4,c1,10)但要满足a.id2(1)>=b.id2(1,4)则只有一条符合(1,c1,0),从而count(id2)为1.同理当行指针指向ttttt a第二行,第三行时count(id2)也为1,但当行指针指向ttttt a第四行(4,c1,10)时,这时表b中所有与此记录的id相等的有两条(1,c1,0)和(4,c1,10), 这时满足a.id2(4)>=b.id2(1,4)的记录就有两条,所以count的值就为2了,同理....
yrwx001 2007-08-24
  • 打赏
  • 举报
回复
SELECT (SELECT COUNT(1)
FROM ttttt b
WHERE (b.id = a.id) AND (b.id2 <= a.id2)
) AS orderid, *
FROM ttttt a

這樣更容易理解一點
SELECT COUNT(1)
FROM ttttt b
WHERE (b.id = a.id) AND (b.id2 <= a.id2)
就是找出 表中 與當前id 相同,id2 <= 當前行id2 的行數
batsharp 2007-08-24
  • 打赏
  • 举报
回复
orderid 的含义是:
这条记录在所有id相同的记录中,根据id2的大小排列出的排序号~

不知道有没有说清楚
batsharp 2007-08-24
  • 打赏
  • 举报
回复
mark
qq_liang 2007-08-24
  • 打赏
  • 举报
回复
数据是这样的
id2 id valu
1 c1 0
2 c2 1
3 c3 20
4 c1 10
5 c2 11
6 c3 12
语句执行结果是这样的
orderid id2 id valu
1 1 c1 0
1 2 c2 1
1 3 c3 20
2 4 c1 10
2 5 c2 11
2 6 c3 12
中国风 2007-08-22
  • 打赏
  • 举报
回复
a.id = b.id) AND (a.ID2 >= b.ID2

ID相同从小到大的记录数
Ray_Zhang 2007-08-22
  • 打赏
  • 举报
回复
里面的意思是,在这个表里同一个ID2下不同的记录数目,你应该没有列完数据,意思就是说,
id2=4c1的但id不同的记录共有2条。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧