我试着写一个查询,但不幸的是我没有成功。 我想知道一个人在一定时期内交付了多少包裹 所以我想知道John(user_id = 1)在01-02-18和28-02-18之间交付了多少包。约翰每天开另一辆车(另一个plate_id) (orders_drivers.user_id,plates.plate_name,orders.delivery_date,orders.package_amount)
我有3张桌子:
使用plate_id
delivery_date
package_amount
plate_id
plate_name
的铭牌
plate_id
plate_date
user_id
我尝试了一些解决方案,但没有得到预期的结果。谢谢!
答案 0 :(得分:0)
尝试使用JOINS,如下所示:
SELECT SUM(o.package_amount)
FROM orders o INNER JOIN orders_drivers od
ON o.plate_id=od.plate_id
WHERE od.user_id=<the_user_id>;
请参阅MySQL Join Made Easy了解相关信息。
您还可以使用子查询:
SELECT SUM(o.package_amount)
FROM orders o
WHERE EXISTS (SELECT 1
FROM orders_drivers od
WHERE user_id=<user_id> AND o.plate_id=od.plate_id);
答案 1 :(得分:0)
SELECT sum(orders.package_amount) AS amount
FROM orders
LEFT JOIN plates ON orders.plate_id = orders_drivers.plate_id
LEFT JOIN orders_driver ON orders.plate_id = orders_drivers.plate_id
WHERE orders.delivery_date > date1 AND orders.delivery_date < date2 AND orders_driver.user_id = userid
GROUP BY orders_drivers.user_id
但严重的是,你需要提出更有意义的问题。
sum是一个函数,用于添加已按GROUP BY分组的所有值。
LEFT JOIN通过id = id连接所有表。在这种情况下,任何其他连接都可以执行此操作,因为所有ID都是唯一的(至少我希望如此)。
在哪里,您在哪里提供日期和用户。
和GROUP BY用户ID,所以如果有更多相同ID的记录,它们将作为一个返回(并按其包装金额加总。)
使用AS,您的结果将以名称&#39;,&#39;,
返回答案 2 :(得分:0)
如果您想要一段时间内用户的packageamount总数,您可以使用此查询:
更新:在where
上添加user_id
子句,以检索与John相关的数据
SELECT od.user_id
, p.plate_name
, SUM(o.package_amount) AS TotalPackageAmount
FROM orders_drivers od
JOIN plates p
ON o.plate_id = od.plate_id
JOIN orders o
ON o.plate_id = od.plate_id
WHERE o.delivery_date BETWEEN convert(datetime,01/02/2018,103) AND convert(datetime,28/02/2018,103)
AND od.user_id = 1
GROUP BY od.user_id
, p.plate_name
groups
和user_id
上的plate_name
行,过滤一段delivery_date
(s),然后计算该组的包数总和