0

我想显示属于 group by sql 语句的聚合列的内容。例子:

SELECT Shippers.ShipperName,COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders
WHERE Orders.ShipperID=Shippers.ShipperID
GROUP BY ShipperName

在上面的示例中,输出将计数作为结果之一,而我甚至需要聚合的 orders.orderID 实际值。所以说如果一个结果计数显示我 2。我需要知道这两个已分组的值是什么。此结果应作为同一表中的另一列。

4

1 回答 1

0

试试这个GROUP_CONCAT

 SELECT Shippers.ShipperName,COUNT(Orders.OrderID) AS NumberOfOrders , array_agg(Orders.OrderID) as which_are_those FROM Orders
 WHERE Orders.ShipperID=Shippers.ShipperID
 GROUP BY ShipperName

array_agg 返回一个数组,但您可以将其转换为文本并根据需要进行编辑(请参阅下面的说明)。

在 8.4 版本之前,您必须在使用之前自己定义它:

CREATE AGGREGATE array_agg (anyelement)
(
sfunc = array_append,
stype = anyarray,
initcond = '{}'
);

或者简单地说:

SELECT Shippers.ShipperName,COUNT(Orders.OrderID) AS NumberOfOrders , string_agg(Orders.OrderID, ',') as which_are_those FROM Orders
 WHERE Orders.ShipperID=Shippers.ShipperID
 GROUP BY ShipperName
于 2013-07-19T09:18:58.930 回答