在MySQL中,如何在单个查询中获取平均数据和特定数据?

在MySQL中,如何在单个查询中获取平均数据和特定数据?,mysql,subquery,Mysql,Subquery,我试图在一个查询中从一个表中获得一个平均值和特定数据。“账单”表如下所示: ------------------------------------------- | UserID | ZipCode | Amount | Date | ------------------------------------------- | 14 | 55520 | 777 | 14/06/2016 | | 14 | 55520 | 250 | 04/05

我试图在一个查询中从一个表中获得一个平均值和特定数据。“账单”表如下所示:

-------------------------------------------
| UserID | ZipCode  | Amount | Date       |
-------------------------------------------
| 14     | 55520    | 777    | 14/06/2016 |
| 14     | 55520    | 250    | 04/05/2016 |
| 15     | 55520    | 340    | 14/06/2016 |
| 15     | 55520    | 300    | 12/05/2016 |
-------------------------------------------
select DATE_FORMAT(STR_TO_DATE(Date, '%d/%m/%Y'), '%m/%Y') as Date, Amount as 'Your Amount', (select avg(Amount) from Billing where ZipCode = 55520 group by Date) as 'Average Amount'from Billing where UserID = 14 group by Date order by Date asc;
我可以通过以下方式获得用户14的特定数据(不幸的是,我的日期列是一个字符串,因此STR_TO_Date函数):

结果如下:

-------------------------
| Date    | Your Amount |
-------------------------
| 05/2016 | 250         | 
| 06/2016 | 777         |
-------------------------
我可以用这个得到平均邮政编码55520:

select DATE_FORMAT(STR_TO_DATE(Date, '%d/%m/%Y'), '%m/%Y') as Date, avg(Amount) as 'Average Amount' from Billing where ZipCode = 55520 group by Date;
结果是:

----------------------------
| Date    | Average Amount |
----------------------------
| 05/2016 | 275.00         | 
| 06/2016 | 558.50         |
----------------------------
但我需要在单个查询中使用它,以便在图表中使用它。因此,我尝试以下方法:

-------------------------------------------
| UserID | ZipCode  | Amount | Date       |
-------------------------------------------
| 14     | 55520    | 777    | 14/06/2016 |
| 14     | 55520    | 250    | 04/05/2016 |
| 15     | 55520    | 340    | 14/06/2016 |
| 15     | 55520    | 300    | 12/05/2016 |
-------------------------------------------
select DATE_FORMAT(STR_TO_DATE(Date, '%d/%m/%Y'), '%m/%Y') as Date, Amount as 'Your Amount', (select avg(Amount) from Billing where ZipCode = 55520 group by Date) as 'Average Amount'from Billing where UserID = 14 group by Date order by Date asc;
但是我现在得到了“子查询返回超过1行”错误。我怎样才能解决这个问题?还是有更好的方法获取我想要的数据?基本上我需要这样的结果:

------------------------------------------
| Date    | Your Amount | Average Amount |
------------------------------------------
| 05/2016 | 250         |  275.00        | 
| 06/2016 | 777         |  558.50        |
------------------------------------------
您必须在子查询中使用相关性:

select DATE_FORMAT(STR_TO_DATE(Date, '%d/%m/%Y'), '%m/%Y') as Date, 
       Amount as 'Your Amount',
       (select avg(Amount) as 'Average Amount' 
        from Billing as t2
        where DATE_FORMAT(STR_TO_DATE(t2.`Date`, '%d/%m/%Y'), '%m/%Y') =
              DATE_FORMAT(STR_TO_DATE(t1.`Date`, '%d/%m/%Y'), '%m/%Y')
              AND ZipCode = 55520 
        group by DATE_FORMAT(STR_TO_DATE(`Date`, '%d/%m/%Y'), '%m/%Y')) as 'Average Amount'
from Billing as t1
where UserID = 14 
order by Date asc;