Sql 如何筛选出数据集上的重复项,且总和为零

Sql 如何筛选出数据集上的重复项,且总和为零,sql,database,postgresql,duplicates,Sql,Database,Postgresql,Duplicates,下面突出显示的是一个重复数据,该数据具有不同的行程总金额。我希望它们从我的查询结果中得到,因为它们的和等于零 这是我获取此数据的查询: SELECT * FROM efleet_copy AS e1 INNER JOIN (SELECT mta_id, COUNT(mta_id) FROM efleet_copy WHERE EXTRACT(MONTH from service_date) = 02 AND mta_id LIKE '_________' GROUP BY mta_id H

下面突出显示的是一个重复数据,该数据具有不同的行程总金额。我希望它们从我的查询结果中得到,因为它们的和等于零

这是我获取此数据的查询:

SELECT * FROM efleet_copy AS e1
INNER JOIN
(SELECT mta_id, COUNT(mta_id) FROM efleet_copy WHERE EXTRACT(MONTH from service_date) = 02
  AND mta_id LIKE '_________'
 GROUP BY mta_id HAVING COUNT(mta_id) > 1) AS e2
ON e1.mta_id = e2.mta_id
WHERE EXTRACT(MONTH from service_date) = 02
ORDER BY e1.mta_id ASC, ride_id ASC, trip_number ASC;

请尝试以下方法:

with cte0 as 
(
    SELECT * FROM efleet_copy AS e1
    INNER JOIN
    (SELECT mta_id, COUNT(mta_id) FROM efleet_copy WHERE EXTRACT(MONTH from service_date) = 02
      AND mta_id LIKE '_________'
     GROUP BY mta_id HAVING COUNT(mta_id) > 1) AS e2
    ON e1.mta_id = e2.mta_id
    WHERE EXTRACT(MONTH from service_date) = 02
    ORDER BY e1.mta_id ASC, ride_id ASC, trip_number ASC
)
SELECT * from cte0 c
WHERE not exists (
    SELECT 1 FROM CTE0 ci
    WHERE c.ride_id = ci.ride_id 
    GROUP BY ride_id 
    having sum(trip_total_amount) = 0 
)

当查询使用多个表时,最好将表别名前置到每一列。例如,与其使用
ride\u id
,不如使用
e1.ride\u id
。否则,像我们这样的读者会感到困惑。仅仅显示当前查询的结果可能不足以得到正确的答案。如果你能为你的问题添加样本数据和预期输出,那就太好了,这样我们就可以试着从整体上优化它。太棒了。您的查询有效,我只需要在零值上添加::money即可。这是一个很大的帮助,非常感谢!我的荣幸。祝你好运