mysql脚本 - 数学解决方案

Ger*_*bdo 0 mysql sql math

我有一个包含16列的表:Id,Product_Id,Sunday,SundayCnt,Monday,MondayCnt,...,SaturdayCnt

如您所见,有工作日列和工作日计数列

如果工作日计数列中的值大于零,我想平均每周工作日的值

 Sunday=30    SundayCnt=0 
 Monday=27    MondayCnt=2 
 Tuesday=2    TuesdayCnt=0 
 Wednesday=75 WednesdayCnt=0 
 Thursday=2   ThursdayCnt=1 
 Friday=12    FridayCnt=0 
 Saturday=15  SaturdayCnt=22
Run Code Online (Sandbox Code Playgroud)

对于此示例,averge必须仅采用(27 + 2 + 15)/3=14.66,因为那些天的Cnt列大于0

关于如何在一个简单的脚本上做这个的任何想法

Jua*_*eza 5

这不会很漂亮.

  SELECT id, Product_Id, 
         IF( denominator = 0, null, numerator / denominator) as average
  FROM 
     (
      SELECT Id, Product_Id,
         (
             if( SundayCnt=0, 0, Sunday) +
             if( MondayCnt=0, 0, Monday) +
             if( TuesdayCnt=0, 0, Tuesday) +
             if( ThursdayCnt=0, 0, Wednesday) +
             if( FridayCnt=0, 0, Thursday) +
             if( SaturdayCnt=0, 0, Saturday) 
         ) as numerator ,
         (
             if( SundayCnt=0, 0, 1) +
             if( MondayCnt=0, 0, 1) +
             if( TuesdayCnt=0, 0, 1) +
             if( ThursdayCnt=0, 0, 1) +
             if( FridayCnt=0, 0, 1) +
             if( SaturdayCnt=0, 0, 1) 
         ) as denominator
      FROM YourTable
   ) as T
Run Code Online (Sandbox Code Playgroud)

但你应该考虑改变你的表格

ID    ProductID   Sales   Counter   Day
1      1          30        0      Sunday
2      1          27        2      Monday
3      1          2         0      Tuesday
4      1          75        0      Wednesday
5      1          2         1      Thursday
6      1          12        0      Friday
7      1          15        22     Saturday
Run Code Online (Sandbox Code Playgroud)

然后您的查询将非常容易

  SELECT product_id, IF(Count(*) = 0, null, SUM(Sales)/Count(*))
  From YourTable
  WHERE Counter <> 0
  GROUP BY product_id
Run Code Online (Sandbox Code Playgroud)