如何按州计算订单
How to Count Orders by State
我有一个包含三个 tables、RMA、订单和客户的数据库,我正在尝试按州(在客户的 table).尽管查询一直只返回一条记录(只计算 UTAH)。
您的查询缺少按 state
聚合记录的 group by
子句。在除MySQL以外的所有其他数据库中,您会得到语法错误...但是不幸的是MySQL是lax的(当禁用了选项ONLY_FULL_GROUP_BY
时),这会导致这种错误更难发现。
select count(*) as total_returns, c.state
from customers c
inner join orders o on c.customerID = o.customerID
inner join rma r on o.orderID = r.orderID
group by c.state --> here
请注意,我使用 table 别名来缩短查询,并将计数更改为简单的 count(*)
(这在查询中是等效的,并且对于数据库而言效率更高)。
如果你想显示没有returns的状态,那么你可以使用left join
代替:
select count(r.orderID) as total_returns, c.state
from customers c
left join orders o on c.customerID = o.customerID
left join rma r on o.orderID = r.orderID
group by c.state --> here
我有一个包含三个 tables、RMA、订单和客户的数据库,我正在尝试按州(在客户的 table).尽管查询一直只返回一条记录(只计算 UTAH)。
您的查询缺少按 state
聚合记录的 group by
子句。在除MySQL以外的所有其他数据库中,您会得到语法错误...但是不幸的是MySQL是lax的(当禁用了选项ONLY_FULL_GROUP_BY
时),这会导致这种错误更难发现。
select count(*) as total_returns, c.state
from customers c
inner join orders o on c.customerID = o.customerID
inner join rma r on o.orderID = r.orderID
group by c.state --> here
请注意,我使用 table 别名来缩短查询,并将计数更改为简单的 count(*)
(这在查询中是等效的,并且对于数据库而言效率更高)。
如果你想显示没有returns的状态,那么你可以使用left join
代替:
select count(r.orderID) as total_returns, c.state
from customers c
left join orders o on c.customerID = o.customerID
left join rma r on o.orderID = r.orderID
group by c.state --> here