为什么count(column_name)的行为如此?

拉贾尔·萨卡(Rajarshi Sarkar)

考虑关系帐户(客户,余额),其中客户是主键,没有空值。

我想根据余额减少对客户进行排名。(拥有最大余额的客户将获得等级1。并没有打破关系,但会跳过等级:如果恰好有两个客户具有最大的余额,则他们各自将获得等级1和等级2。)

为什么以下查询从不打印排名为1的客户?

    select A.customer, 1+count(B.customer) 
    from account A, account B 
    where A.balance < B.balance 
    group by A.customer 

SQLfiddle链接

泽德福克斯

让我们尝试这个例子

排名不跳过等级

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

要显示从500-> 300的排名,只需将更ORDER BY balance改为ORDER BY balance DESC

如果多行具有相同的等级,则跳过等级

如果您希望跳过分配的排名,则可以对查询进行一些调整,例如SQL Fiddle

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么可以引用COUNT(column_name)而不引用column_name本身?

COUNT个用法(不同的column_name)

为什么子进程行为如此奇怪?

为什么此队列的行为如此?

为什么 df['column_name'].replace(a_value, np.nan) 不起作用?

MySql 如何 COUNT(column_name = 'foobar' or null) 工作?

为什么内置的python sum函数的行为如此?

为什么YouTube的缓冲/加载行为在Chrome中如此可怕?

JavaScript:为什么Object.hasOwnProperty方法的行为如此?

为什么“ cp -ra /。b”的行为会如此?

为什么标准数组的std :: accumulate行为如此?

为什么可变参数模板在C ++中的行为如此?

to_char(Column_name)数据集中的列名是什么

COUNT(1)-COUNT(column_name)仅返回空值的计数吗?

Outlook中的蓝线是什么?为什么它的行为如此奇怪?

column_name和qualified_col_name有什么区别?

大型数据集上sum(column_name),sum(1)和count(*)之间的巨大性能差异

为什么numpy.nan的max和min有如此奇怪的行为?

为什么matplotlib.figure.Figure的行为与matplotlib.pyplot.figure如此不同

当您尝试修改javascript参数对象时,为什么行为如此奇怪?

为什么可变和不可变集中的类型推断的行为如此不同?

为什么在实践中我的二进制堆插入行为如此?

为什么此递归C ++函数具有如此糟糕的缓存行为?

为什么在这种情况下mouseout处理程序的行为如此不合逻辑?

为什么 System::Convert 对舍入有如此奇怪的定义行为?

为什么子内部的“ my @variable”被子/子修改的行为如此奇怪

为什么我会为循环获得如此奇怪的行为值?

请告诉我为什么 c 代码的行为方式如此详细?

为什么哈希如此慢?