日期:2014-05-18  浏览次数:20479 次

谁帮我解释下这个语句
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了,同理....