繁体   English   中英

单个MySQL查询可返回不同的分类平均值

[英]Single MySQL query to return different categorized averages

我有一个MySQL数据库,该数据库包含一个包含3列的表:调查,类型和响应。 每个调查可以具有多种类型,每种类型可以具有多种响应。 响应是一个整数。

|--------|-------|----------|
| survey | type  | response |
|--------|-------|----------|
| Food   | Men   |    4     |
|--------|-------|----------|
| Food   | Men   |    5     |   
|--------|-------|----------|
| Food   | Women |    1     |
|--------|-------|----------|
| Food   | Women |    3     | 
|--------|-------|----------|
| Drink  | Old   |    3     |
|--------|-------|----------|
| Drink  | Old   |    5     |   
|--------|-------|----------|
| Drink  | Young |    1     |
|--------|-------|----------|

在单个SQL查询中,是否可能返回来自相同调查的所有响应以及来自相同类型的所有响应的平均响应?

将以下SQL与GROUP BY返回每种类型的平均值

`SELECT survey, type, AVG(response) FROM 'test' GROUP BY survey, type`

但是是否可以修改查询以返回调查平均值(类型的组合)以输出类似以下内容的方法?

|--------|-------|---------------|
| survey | type  | AVG(response) |
|--------|-------|---------------|
| Food   | Men   |      4.5      |
|--------|-------|---------------|
| Food   | Women |       2       |
|--------|-------|---------------|
| Food   | ----- |      3.25     | 
|--------|-------|---------------|
| Drink  | Old   |       4       |
|--------|-------|---------------|
| Drink  | Young |       1       |   
|--------|-------|---------------|
| Drink  | ----- |      2.5      |
|--------|-------|---------------|

当前,我必须使用循环来输入新的调查并输入值以检索这两个平均响应,但是,如果可以在没有循环的情况下实现此功能,那么在单个查询中,效率会更高。

在此示例中,我使用一个非常简化的表格来说明问题:)

您也可以尝试使用WITH ROLLUP选项

create table t(survey varchar(50),type varchar(50), response int);

insert into t values('Food','Men',4);
insert into t values('Food','Men',5);
insert into t values('Food','Women',1);
insert into t values('Food','Women',3);
insert into t values('Drink','Old',3);
insert into t values('Drink','Old',5);
insert into t values('Drink','Young',1);


select survey,type,avg(response)
  from t
group by survey,type with rollup; 

您可以为此使用带有PARTITION BYOVER子句

SELECT survey, 
       type, 
       AVG(response) AS AVGTYPE,
       AVG(response) OVER(PARTITION BY survey) AS AVGSURVEY 
FROM test 
GROUP BY survey, type

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM