如何在mysql表中进行选择、平均和排序

如何在mysql表中进行选择、平均和排序,mysql,select,average,Mysql,Select,Average,我在mySql中有一个表,如图所示 我想写一个查询,它的结果将按课程列分组,并添加新行,这是课程列的平均值和CNT列的总和值。。。。 对于这个查询,我使用这个 我使用这个查询,但它给出的结果如图3所示,在这种情况下,我无法按PERC排序 select no, STUD_ID,CLASS,LESSON, AVG(PERC) as PERC,SUM(CNT) as CNT from t_lesson where LESSON='CHEM' group by CLASS union all sele

我在mySql中有一个表,如图所示

我想写一个查询,它的结果将按课程列分组,并添加新行,这是课程列的平均值和CNT列的总和值。。。。 对于这个查询,我使用这个

我使用这个查询,但它给出的结果如图3所示,在这种情况下,我无法按PERC排序

select no, STUD_ID,CLASS,LESSON, AVG(PERC) as PERC,SUM(CNT) as CNT from t_lesson where LESSON='CHEM' group by CLASS
union all
select no,STUD_ID,CLASS,'AVERAGE' as LESSON, AVG(PERC) as PERC, SUM(CNT) as CNT from t_lesson where LESSON='CHEM' group by LESSON

不知道你是否在寻找这样的东西:

SELECT fields_list, (field_to_modify + (SELECT AVG(average_field) FROM table2)) AS order_field 
  FROM table1
WHERE your_conditions
  ORDER BY order_field;

看起来您正在选择课程为CHEM的所有行,然后您需要一个额外的行,其中包含percantage的平均值。那么:

select *
from (
  -- this part gets all the "CHEM" rows
  select * 
  from <your_table_name>
  where lesson = "CHEM"
  union
  -- this parts selects the aggregate row
  select 
    NULL            as `no`, 
    NULL            as `stud_id`, 
    NULL            as `class`,
    "average"       as `lesson`,
    avg(percentage) as `perc`, 
    sum(count)      as `cnt`
  from <your_table_name>
  where lesson = "CHEM"
) q
order by `perc` desc;

请注意,排序是由外部查询执行的。

您要分组哪些字段?@namco Yor required太复杂了,没有很好的解释,请正确解释。用我最差的英语,这就是为什么我试着用图片来解释:@namco没问题,但是试着解释一下你想要的结果,因为我不明白为什么你的结果在一个manar中有四行,而CHEM的平均值显示在其他CHEM行之间。