我正在做一个过去的纸质问题。数据库模式是:
- 客户(客户 ID、姓名、地址、邮政编码),
- 订单(orderID,customerID REFERENCES Customer.customerID,orderDate, 送货地址)
我需要选择每个客户的订单数量以及客户的姓名,按订单数量从多到少排序。
我有以下查询:
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?我不确定,因为我按未选择的列进行分组。如果它不起作用,还有其他选择吗?
最佳答案
当然,您可以group by
未选择的列。不过,这似乎不是您问题的要点。您想要选择一个不在 group by
中的列。那更有趣。
假设 customerID
是唯一的,您的语法是正确的 ANSI 语法。 “唯一”是对关系的更简单描述。这实际上称为功能依赖。这是一个非常简单的 blog关于这个问题。
如果我没记错的话,它已经成为 SQL 标准的一部分大约 15 年了。但是,函数依赖项的使用是可选的,并且大多数数据库不支持您的语法。
我相信唯一支持它的数据库是 Postgres、MySQL 和相关数据库。相反,您应该在 GROUP BY
中包含名称和所有未聚合的表达式。
关于sql - 您可以按未在 SQL 中选择的列分组吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49630880/