我有一个包含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
关于如何在一个简单的脚本上做这个的任何想法
这不会很漂亮.
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)