0

数据库:tennis,即网球俱乐部。

讨论的表:penalties

列:paymentno, amount,playerno

任务:

  • 将罚款金额分类为高、中、低 - 完成!
  • 然后,计算低类别的处罚数量 - 需要帮助。

如何在不使用计数功能的情况下完成第 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;

谢谢。

4

1 回答 1

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

PP:

playerno= 80 不被任何条件覆盖

PPPS:我会这样写这个案例:

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

PPPPS:没有功能的解决方案(概念)

SELECT @I:=@I+1, other_columns FROM table, (SELECT @I:=0) x

并拥有@I,您可以计算您想要的

但在这种情况下这是一个糟糕的解决方案

于 2012-07-04T00:19:53.760 回答