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即可。这是一个很大的帮助,非常感谢!我的荣幸。祝你好运