谁帮我解释下这个语句
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的内容谁帮我解释下为什么是这个结果
------解决方案--------------------a.id = b.id) AND (a.ID2 > = b.ID2
ID相同从小到大的记录数
------解决方案--------------------orderid 的含义是:
这条记录在所有id相同的记录中,根据id2的大小排列出的排序号~
不知道有没有说清楚
------解决方案--------------------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 的行數
------解决方案--------------------你假设有一个行指针,当指向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了,同理....