我正在做一个过去的纸质问题。数据库架构是:
我需要选择每个客户的订单数量以及客户的名称,按大多数订单排序。
我有以下查询:
SELECT COUNT(orderID) AS orders_placed, name
FROM Customer INNER JOIN
Orders
ON Orders.customerID = Customer.customerID
GROUP BY Customer.customerID
ORDER BY orders_placed DESC;
我的问题是这个查询是否适用于所有DBMS?我不确定,因为我正在按照我没有选择的专栏进行分组。如果它不起作用还有其他选择吗?
答案 0 :(得分:4)
当然,您可以group by
找到您尚未选择的列。但这似乎并不是你问题的要点。您想要选择不在group by
中的列。这更有趣。
假设customerID
是唯一的,您的语法是正确的ANSI语法。 "独特"是关系的简单描述。这实际上称为功能依赖。关于这个主题,这是一个非常简单的blog。
如果我没记错的话,它已经成为SQL标准的一部分已有15年了。但是,函数依赖项的使用是可选的,大多数数据库都不支持您的语法。
我相信支持它的唯一数据库是Postgres,MySQL和相关数据库。相反,您应该在GROUP BY
。