mysql查询使用条件里面的和

时间:2012-09-12 11:24:54

标签: mysql

我有一个专栏( * Purchasetype * ),视频表 purchasetype 中的用户ID是如何包含值0,1,2, 3,4,..等我希望通过userid对这两个值进行求和。

对于前:sum ( purchasetype ) order by userid但我想要这样

if purchasetype= 0  then its value is 0.99
if purchasetype =1 or 20  then its value is 3.99
if purchasetype = 3 or 13or 22  then its value is 9.99
等等。以下是完整清单

0 ,17= 0.99
1,20=3.99
2=6.99
3,13,22=9.99
4,5,6,7,8,,10,11,12=0.00
14=19.99
15,23=39.99
16,24=59.99
18,21=01.99
19=02.99
else
19.99

我想将purchasetype的所有值与其替换值相加(上面给出)order by userid

我们可以将条件放在mysql的sum()函数中吗?如果它可能那么请给我解决方案,可能这将解决我的问题

3 个答案:

答案 0 :(得分:3)

您可以使用汇总函数SUM()CASE

select 
  SUM(CASE purchaseType
        WHEN 0 or 17 THEN 0.99
        WHEN 1 or 20 THEN 3.99
        WHEN 3 or 13 or 22 THEN 9.99 
        WHEN 4 or 5 or 6 or 7 or 8 or 9 or 10 or 11 or 12 THEN 0
        WHEN 14 THEN 19.99
        WHEN 15 or 23 THEN 39.99
        WHEN 16 or 24 THEN 59.99
        WHEN 18 or 21 THEN 1.99
        WHEN 19 THEN 2.99
        ELSE 19.99 END) as Total
from yourTable

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

我认为最好的方法是创建表ptPrices

create table ptPrices (Purchasetype int, Price float);
insert into ptPrices values (0,0.99);
insert into ptPrices values (1,3.99);
....
insert into ptPrices values (19,2.99);

然后使用此查询:

select sum(isnull(ptPrices.Price,19.99)) from Table 
left join ptPrices 
    on Table.Purchasetype=ptPrices.Purchasetype;

答案 2 :(得分:0)

虽然这不使用来自MySQL查询的SUM,但逻辑将完成工作

    $query = mysqli_query($link, "SELECT * FROM video");
      while($row = mysqli_fetch_assoc($query)){
         //Then set conditionals 
         if($row['purchase_type)==0 || $row['purchase_type)==17){
              $values[] = 0.99;
             //Then your mysqli_query here

           }
    elseif($row['purchase_type)==1 || $row['purchase_type)==20){
           $values[]= 3.99;           

           }
    elseif//Blah blah for all values
         }
//After exhausting all the rows, add the SUM
$sum = array_sum($values); //$sum will be equal to the addition of all the vlues of the //array $values