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