您可以按照在SQL

时间:2018-04-03 13:05:36

标签: sql postgresql group-by

我正在做一个过去的纸质问题。数据库架构是:

  • 客户(customerID,姓名,地址,邮政编码),
  • 订单(orderID,customerID REFERENCES Customer.customerID,orderDate, 是DeliveryAddress)

我需要选择每个客户的订单数量以及客户的名称,按大多数订单排序。

我有以下查询:

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?我不确定,因为我正在按照我没有选择的专栏进行分组。如果它不起作用还有其他选择吗?

1 个答案:

答案 0 :(得分:4)

当然,您可以group by找到您尚未选择的列。但这似乎并不是你问题的要点。您想要选择不在group by中的列。这更有趣。

假设customerID是唯一的,您的语法是正确的ANSI语法。 "独特"是关系的简单描述。这实际上称为功能依赖。关于这个主题,这是一个非常简单的blog

如果我没记错的话,它已经成为SQL标准的一部分已有15年了。但是,函数依赖项的使用是可选的,大多数数据库都不支持您的语法。

我相信支持它的唯一数据库是Postgres,MySQL和相关数据库。相反,您应该在GROUP BY

中包含名称和所有未聚合的表达式