由于
DISTINCT
不能直接与
SUM
一起使用在列上,我们可以先通过子查询来选取唯一的
amount
值(尽管在实际情况中,我们更可能是基于订单ID去重,然后求和金额),但这里为了说明概念,我们假设每个订单金额都是唯一的(这在实际中很少见)。
然而,更常见的做法是基于订单ID去重,然后在外层查询中求和:
SELECT SUM(amount) AS total_unique_sales
FROM (
SELECT DISTINCT order_id, amount
FROM orders
) AS unique_orders;
但上面的查询实际上并不需要
DISTINCT
在
SELECT
子句中同时列出
order_id
和
amount
,因为只要
order_id
唯一,
amount
也就自然唯一了(假设每个订单ID对应一个唯一的金额)。所以,更简洁的写法是:
SELECT SUM(amount) AS total_unique_sales
FROM (
SELECT order_id, amount
FROM orders
GROUP BY order_id
) AS unique_orders;
这里,我们通过
GROUP BY order_id
来确保每个订单ID只被计算一次,然后在外层查询中对这些唯一订单的金额进行求和。