SQL 服务器:如何 return 最高聚合列
SQL Server : how to return highest agregated columns
我可以 return 两个最高的聚合结果吗?
例如,我有这样的结果:
CustomerId Total
---------------------
5 1100.00
n/a 100.00
7 100.00
6 0.00
我需要 return 最多 2 行这样的:
CustomerId Total
-----------------------
5 1100.00
7 100.00
n/a 100.00
我尝试使用 TOP 2
,但问题是我不知道如果存在具有相同值的行,我如何才能 return 更多行。
这是我目前的查询
SELECT
ISNULL(CONVERT(varchar(50), u.CustomerId), 'not found') CustomerId ,
ISNULL(SUM(o.Total), 0.00) Total
FROM
Orders o
FULL OUTER JOIN
CustomerId u ON u.UserId = o.UserId
GROUP BY
u.CustomerId
ORDER BY
Total DESC;
你要WITH TIES
吗?
SELECT TOP (2) WITH TIES
ISNULL(CONVERT(varchar(50), u.CustomerId), 'not found') CustomerId ,
ISNULL(SUM(o.Total), 0.00) Total
FROM Orders o
FULL OUTER JOIN CustomerId u ON u.UserId = o.UserId
GROUP BY u.CustomerId
ORDER BY total desc;
目前还不清楚您为什么需要 FULL JOIN
。除非您有孤立订单,否则应该 LEFT JOIN
从客户 table 开始,然后转到订单 table。还不清楚为什么您有一个名为 CustomerId
的 table,其中一个列具有相同的名称。理想情况下,您应该将其命名为 table Customers
,因此:
SELECT TOP (2) WITH TIES
c.CustomerId
ISNULL(SUM(o.Total), 0.00) Total
FROM Customers c
LEFT JOIn Orders o ON u.UserId = c.UserId
GROUP BY c.CustomerId
ORDER BY total desc;
首先,外连接不是必需的,除非你的数据模型真的很乱。
您可以使用 TOP 2 WITH TIES
:
SELECT TOP (2) WITH TIES u.CustomerId, SUM(o.Total)
FROM Orders o JOIN
CustomerId u
ON u.UserId = o.UserId
GROUP BY u.CustomerId
Order by Total desc;
我可以 return 两个最高的聚合结果吗?
例如,我有这样的结果:
CustomerId Total
---------------------
5 1100.00
n/a 100.00
7 100.00
6 0.00
我需要 return 最多 2 行这样的:
CustomerId Total
-----------------------
5 1100.00
7 100.00
n/a 100.00
我尝试使用 TOP 2
,但问题是我不知道如果存在具有相同值的行,我如何才能 return 更多行。
这是我目前的查询
SELECT
ISNULL(CONVERT(varchar(50), u.CustomerId), 'not found') CustomerId ,
ISNULL(SUM(o.Total), 0.00) Total
FROM
Orders o
FULL OUTER JOIN
CustomerId u ON u.UserId = o.UserId
GROUP BY
u.CustomerId
ORDER BY
Total DESC;
你要WITH TIES
吗?
SELECT TOP (2) WITH TIES
ISNULL(CONVERT(varchar(50), u.CustomerId), 'not found') CustomerId ,
ISNULL(SUM(o.Total), 0.00) Total
FROM Orders o
FULL OUTER JOIN CustomerId u ON u.UserId = o.UserId
GROUP BY u.CustomerId
ORDER BY total desc;
目前还不清楚您为什么需要 FULL JOIN
。除非您有孤立订单,否则应该 LEFT JOIN
从客户 table 开始,然后转到订单 table。还不清楚为什么您有一个名为 CustomerId
的 table,其中一个列具有相同的名称。理想情况下,您应该将其命名为 table Customers
,因此:
SELECT TOP (2) WITH TIES
c.CustomerId
ISNULL(SUM(o.Total), 0.00) Total
FROM Customers c
LEFT JOIn Orders o ON u.UserId = c.UserId
GROUP BY c.CustomerId
ORDER BY total desc;
首先,外连接不是必需的,除非你的数据模型真的很乱。
您可以使用 TOP 2 WITH TIES
:
SELECT TOP (2) WITH TIES u.CustomerId, SUM(o.Total)
FROM Orders o JOIN
CustomerId u
ON u.UserId = o.UserId
GROUP BY u.CustomerId
Order by Total desc;