我希望能够在一个月内获得一辆卡车消耗的平均汽油数量
SELECT t.truckCode,
COALESCE(monthname(orderDate),'Not Announced') as month,
IFNULL (avg(petrolQty),0) as avgPetrolQty
from truck t left join orderz o
on t.truckId = o.truckId
group by t.truckCode, COALESCE(monthname(orderDate),'Not Announced')
order by 1,2
并得到了这个结果
+-----------+---------------+----------------+
| TRUCKCODE | MONTH | AVGPETROLQTY |
+-----------+---------------+----------------+
| BY2004 | January | 13.0 |
| BY2354 | January | 33.0 |
| BY2874 | January | 13.0 |
| BY2994 | Not Announced | 0.0 |
| BY8754 | Not Announced | 0.0 |
+-----------+---------------+----------------+
这些是我的表
DROP TABLE IF EXISTS truck;
CREATE TABLE truck (
truckId INT NOT NULL AUTO_INCREMENT,
truckCode VARCHAR(255) NOT NULL,
purchasedDate timestamp NOT NULL,
descriptions VARCHAR(255) NOT NULL,
PRIMARY KEY (truckId)
);
DROP TABLE IF EXISTS orderz;
CREATE TABLE orderz (
orderId INT NOT NULL AUTO_INCREMENT,
petrolQty DOUBLE NOT NULL,
orderDate timestamp NOT NULL,
truckId INT,
PRIMARY KEY (orderId),
FOREIGN KEY (truckId) REFERENCES truck(truckId)
ON UPDATE CASCADE
ON DELETE CASCADE
);
所以问题是我不希望平均值取决于哪个月或哪个月,因为我会得到不同月份的不同平均值 我想要一个平均/ permonth代表一辆卡车的所有订单,所以我想要的是一个获取ID,显示卡车所有订单的平均/每月 注意每个月我非常重要 目前我正在工作的是这个我希望得到一个平均/每月,所以当我得到卡车的详细信息,包括它已经发出的订单,我也将得到一个平均说明所有订单,按订单日期分类
这是结果
+-----------+---------------------+
| TRUCKCODE | AVG(AVGPETROLQTY) |
+-----------+---------------------+
| BY2004 | 13.0 |
| BY2874 | 13.0 |
| BY2994 | 0.0 |
| BY8754 | 0.0 |
| BY2354 | 33.0 |
+-----------+---------------------+
答案 0 :(得分:1)
我想你第一次差点儿得到它。你需要:
生成的完整查询是:
boolean containsURL(String[] array, URL url) {
for (String s : array)
if (url.startsWith(s))
return true;
return false;
}
isSupported = containsURL(supported, url);
此解决方案有两个select truckcode, avg(avgPetrolQty) from (
SELECT t.truckCode,
COALESCE(year(orderDate),'Not Announced') as year,
COALESCE(monthname(orderDate),'Not Announced') as month,
IFNULL (avg(petrolQty),0) as avgPetrolQty
from truck t left join orderz o
on t.truckId = o.truckId
group by t.truckCode,
COALESCE(year(orderDate),'Not Announced'),
COALESCE(monthname(orderDate),'Not Announced')
) group by truckcode
,内部包含在外部。
内部选择按年/月/卡车组合平均金额。如果卡车在3个月内(2005年1月,2005年8月,2006年1月)有20个订单,则内部查询将生成三行。每个人都会显示每个月的平均金额。其他卡车将在此查询中显示更多行。
然后,取这个中间结果,外部查询将每辆卡车的行平均为一个。因此,对于有问题的卡车,三个“每月”行平均为一个。其他卡车在此查询中也会获得一行。
就是这样!玩得开心。