2012-07-04 67 views
0

数据库:tennis,即网球俱乐部。MySQL计数没有计数功能?

表讨论:penalties

列:paymentnoamountplayerno

任务:

  • 分类处罚金额由高,中,低 - 完成!
  • 然后,计算低级别的处罚次数 - 需要帮助。

如何在不使用计数功能的情况下做第2部分?这可能吗 ?

1 SQL查询:

use tennis; 

select tennis.penalties.paymentno, 
     tennis.penalties.amount, 
     tennis.penalties.playerno, 
     case 
     when playerno >= 0 and playerno <= 40 then 'low' 
     when playerno > 40 and playerno < 80 then 'medium' 
     when playerno > 80 then 'high' 
     end 
from tennis.penalties; 

感谢。

+1

好的。我问,因为“不要使用COUNT()”对我来说看起来像一个愚蠢的教授伎俩。为什么要以Dennis Ritchie和Jon Postel的名义,当简单的方法变得简单时,您是否会尝试用SQL中的难题? –

+0

@Ollie Jones:count()是什么* easy *方法?我敢肯定它不会比使用sum()'' – zerkms

回答

1
SUM(playerno >= 0 and playerno <= 40) AS count_penalties_in_low 

SUM(CASE WHEN playerno >= 0 and playerno <= 40 THEN 1 ELSE 0 END) AS count_penalties_in_low 

因此从技术上讲,你总结了1秒,这实际上等于算

PS:

playerno >= 0 and playerno <= 40 

可以改写到

playerno BETWEEN 0 AND 40 

PPS:

playerno = 80没有覆盖的任何条件

PPPS:我会写在这种方式这种情况下:

case 
    when playerno <= 40 then 'low' 
    when playerno <= 80 then 'medium' 
         else 'high' 
    end 

PPPPS:无功能的溶液(概念)

SELECT @I:[email protected]+1, other_columns FROM table, (SELECT @I:=0) x 

,并具有@I你可以指望你想要什么

但是在这种情况下它是可怕的解决方案

+0

的解决方案更容易,我会尽快尝试。但是我的教科书还没有提到任何功能。那么,有没有办法做到没有任何功能? – Master

+0

@ user1499832:是的,有一种方式 – zerkms

+0

哇!你能解释最后的解决方案吗?它对我来说是新的。我知道@XXXX是一个用户varibale。 – Master