Mysql 不返回1?因为B表中有零行要与A表中的“排名靠前的帐户”联接,所以加法永远不会发生,计数永远不会达到计数0。如果你有一个外部连接,你可能有一个战斗的机会,但你使用的是一个老式的内部连接(这是另一个不允许的-他们在上个千年已经过时了)。好的。因此,count
Mysql 不返回1?因为B表中有零行要与A表中的“排名靠前的帐户”联接,所以加法永远不会发生,计数永远不会达到计数0。如果你有一个外部连接,你可能有一个战斗的机会,但你使用的是一个老式的内部连接(这是另一个不允许的-他们在上个千年已经过时了)。好的。因此,count,mysql,sql,database,group-by,Mysql,Sql,Database,Group By,不返回1?因为B表中有零行要与A表中的“排名靠前的帐户”联接,所以加法永远不会发生,计数永远不会达到计数0。如果你有一个外部连接,你可能有一个战斗的机会,但你使用的是一个老式的内部连接(这是另一个不允许的-他们在上个千年已经过时了)。好的。因此,count(null集)返回null。对吗?然后,1+null是不可能的。是吗?你没有空集。您根本没有排名靠前的帐户的行,因为没有行满足联接条件。和COUNT(null set)返回0,只是为了进行更改。忘记排名计算吧。只需在不使用,1+COUNT(B.
不返回1?因为B表中有零行要与A表中的“排名靠前的帐户”联接,所以加法永远不会发生,计数永远不会达到计数0。如果你有一个外部连接,你可能有一个战斗的机会,但你使用的是一个老式的内部连接(这是另一个不允许的-他们在上个千年已经过时了)。好的。因此,
count(null集)
返回null
。对吗?然后,1+null
是不可能的。是吗?你没有空集。您根本没有排名靠前的帐户的行,因为没有行满足联接条件。和COUNT(null set)返回0,只是为了进行更改。忘记排名计算吧。只需在不使用,1+COUNT(B.Customer)
部分的情况下运行查询。请注意,排名最高的条目不会出现。因为没有其他客户的余额小于排名1的客户,因此没有满足联接条件的行。因此,count(B.customer)
在这种情况下采用空集。但是为什么1+count(B.customer)
不返回1呢?因为B表中有零行要与A表中的“排名靠前的帐户”联接,所以加法永远不会发生,计数永远不会达到计数0。如果你有一个外部连接,你可能有一个战斗的机会,但你使用的是一个老式的内部连接(这是另一个不允许的-他们在上个千年已经过时了)。好的。因此,count(null集)
返回null
。对吗?然后,1+null
是不可能的。是吗?你没有空集。您根本没有排名靠前的帐户的行,因为没有行满足联接条件。和COUNT(null set)返回0,只是为了进行更改。忘记排名计算吧。只需在不使用,1+COUNT(B.Customer)
部分的情况下运行查询。请注意,排名最高的条目不会出现。因为没有其他客户的余额小于排名1的客户,因此没有满足联接条件的行。因此,count(B.customer)
在这种情况下采用空集。但是为什么1+count(B.customer)
不返回1呢?因为B表中有零行要与A表中的“排名靠前的帐户”联接,所以加法永远不会发生,计数永远不会达到计数0。如果你有一个外部连接,你可能有一个战斗的机会,但你使用的是一个老式的内部连接(这是另一个不允许的-他们在上个千年已经过时了)。好的。因此,count(null集)
返回null
。对吗?然后,1+null
是不可能的。是吗?你没有空集。您根本没有排名靠前的帐户的行,因为没有行满足联接条件。和COUNT(null set)返回0,只是为了进行更改。忘记排名计算吧。只需在不使用,1+COUNT(B.Customer)
部分的情况下运行查询。请注意,排名最高的条目不会出现。因为没有其他客户的余额小于排名1的客户,因此没有满足联接条件的行。因此,count(B.customer)
在这种情况下采用空集。但是为什么1+count(B.customer)
不返回1呢?因为B表中有零行要与A表中的“排名靠前的帐户”联接,所以加法永远不会发生,计数永远不会达到计数0。如果你有一个外部连接,你可能有一个战斗的机会,但你使用的是一个老式的内部连接(这是另一个不允许的-他们在上个千年已经过时了)。好的。因此,count(null集)
返回null
。对吗?然后,1+null
是不可能的。是吗?你没有空集。您根本没有排名靠前的帐户的行,因为没有行满足联接条件。和COUNT(null set)返回0,只是为了进行更改。忘记排名计算吧。只需在不使用,1+COUNT(B.Customer)
部分的情况下运行查询。请注意,排名最高的条目不会出现。
select A.customer, 1+count(B.customer)
from account A, account B
where A.balance < B.balance
group by A.customer
SELECT A.customer, A.balance, (
SELECT count(*)+1
FROM account B
WHERE A.balance < B.balance
) AS rank
FROM account A ORDER BY A.balance DESC
customer balance rank
P 500 1
Q 400 2
R 400 2
S 300 4
select A.customer, (
select count(*) + 1
from account B
where A.balance < B.balance
) from account A
select A.customer,
(select count(*) from account) -
(select count(*) from account a1 where a1.balance<a.balance) rank
from account A
Order by rank
set @number:=0;
set @balance:=0;
select customer, balance, rank
from (
select
*,
@number:=if(@balance=balance, @number, @number+1) as rank,
@balance:=balance
from account
order by balance
) as rankeddata;
customer balance rank
S 300 1
Q 400 2
R 400 2
P 500 3
set @number:=0;
set @balance:=0;
set @rank_reused:=0;
select customer, balance, rank
from (
select
*,
@number:=if(@balance=balance, @number, @number+1+@rank_reused) as rank,
@rank_reused:=if(@balance=balance, @rank_reused+1, 0) as reused,
@balance:=balance
from account
order by balance desc
) as rankeddata;
customer balance rank
S 300 1
Q 400 2
R 400 2
P 500 4