[英]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 BY
的OVER
子句
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.