复制MySQL查询的结果集

复制MySQL查询的结果集,mysql,Mysql,我希望根据表中日期的工作日平均出特定查询的值,并在其他日期复制它。我知道这个解释令人困惑,请参见下面的示例 Eg:- Table Structure - ID, Value, Date Expected Result- Avg(value), Weekname(day) 12.23 , Mon 12.23 , Tue 12.23 , Wed 12.23 , Thu 12.23 , Fri 34.56 , Sat 56.34 , Sun 也就是说,周

我希望根据表中日期的工作日平均出特定查询的值,并在其他日期复制它。我知道这个解释令人困惑,请参见下面的示例

Eg:- Table Structure - 
ID, Value, Date

Expected Result-
Avg(value), Weekname(day)
12.23    , Mon
12.23    , Tue
12.23    , Wed
12.23    , Thu
12.23    , Fri
34.56    , Sat
56.34    , Sun
也就是说,周一到周五的值是相同的

Current Result
Avg(value), Weekname(day)
12.23    , Mon
34.56    , Sat
56.34    , Sun
查询如下所示-

select avg(value)
      ,daynameofweek(date) 
from table
group by (CASE WHEN  DAYOFWEEK(DATE) NOT BETWEEN 2 and 6 THEN DAYOFWEEK(DATE) END)
提前谢谢你的帮助

编辑-添加示例数据集 预期结果

Avg(Value)  daynameofweek(date) 
1.625   Monday
1.625   Tuesday
1.625   Wednesday
1.625   Thursday
1.625   Friday
1.300   Saturday
1.702   Sunday

您显示的结果是周一到周五的“MON”,但这是DBMS任意选择的,您也可以以“WED”结束,因为这一天也在分组范围内。所以从这里得到一个确定的值开始。然后加入一个组成的日表:

select
  days.dayname,
  data.avg_value
from
(
  select 
    case when dayofweek(date) between 2 and 6 then 2 else dayofweek(date) end as day
    avg(value) as avg_value
  from table
  group by case when dayofweek(date) between 2 and 6 then 2 else dayofweek(date) end
) data
join
(
  select 1 as day, 'SUN' as dayname, 7 as sortkey union all
  select 2 as day, 'MON' as dayname, 1 as sortkey union all
  select 2 as day, 'TUE' as dayname, 2 as sortkey union all
  select 2 as day, 'WED' as dayname, 3 as sortkey union all
  select 2 as day, 'THU' as dayname, 4 as sortkey union all
  select 2 as day, 'FRI' as dayname, 5 as sortkey union all
  select 7 as day, 'SAT' as dayname, 6 as sortkey
) days on days.day = data.day
order by data.sortkey;

(如果我没记错的话,MySQL允许按别名分组(
按天分组
),这不符合标准。如果您更喜欢,可以使用它。)

请在postWhy 2和6中包含示例数据集和表定义?这背后的逻辑是什么?复制值直到间隙结束?请重新表述问题。2指星期一的工作日,6指星期五。请参阅:示例数据集似乎与原始问题并不相关
select
  days.dayname,
  data.avg_value
from
(
  select 
    case when dayofweek(date) between 2 and 6 then 2 else dayofweek(date) end as day
    avg(value) as avg_value
  from table
  group by case when dayofweek(date) between 2 and 6 then 2 else dayofweek(date) end
) data
join
(
  select 1 as day, 'SUN' as dayname, 7 as sortkey union all
  select 2 as day, 'MON' as dayname, 1 as sortkey union all
  select 2 as day, 'TUE' as dayname, 2 as sortkey union all
  select 2 as day, 'WED' as dayname, 3 as sortkey union all
  select 2 as day, 'THU' as dayname, 4 as sortkey union all
  select 2 as day, 'FRI' as dayname, 5 as sortkey union all
  select 7 as day, 'SAT' as dayname, 6 as sortkey
) days on days.day = data.day
order by data.sortkey;