Я создал временную таблицу T3_final следующим образом.Я хотел посчитать отличное нет.отслеживания идентификаторов в этом на уровне destination_address_id.Однако числа завышены (73 для конкретного идентификатора адреса назначения).Почему это происходит?
Редактировать: Обновлены детали вопроса.Предоставленное изображение имеет 16 идентификаторов отслеживания для этого конкретного идентификатора адреса назначения, но окончательные результаты показывают более 70 идентификаторов отслеживания для того же самого.Добавлен SQL-код, содержащий таблицы T3 и временные таблицы маршрутов, а также включенный код до окончательного вывода.
Образец набора данных для таблицы T3 (упорядочен по tracking_id)
| lat1 | long1 | actual_lat | actual_long | tracking_id | destination_address_id | distance |
|-----------|------------|------------|-------------|-----------------|------------------------|----------|
| 41.867318 | -87.625199 | 41.866985 | -87.625177 | TBA291146931000 | 57137334115 | 37.11 |
| 41.699121 | -87.685905 | 41.699075 | -87.685903 | TBA294192909000 | 52320567 | 5.08 |
| 41.839378 | -87.64605 | 41.839463 | -87.646085 | TBA294636573000 | 60406350705 | 9.95 |
| 41.893888 | -87.960975 | 41.893863 | -87.960985 | TBA295159303000 | 85918178503 | 2.87 |
| 41.801833 | -87.587964 | 41.802045 | -87.587743 | TBA295399226000 | 1.41975E+11 | 29.88 |
| 41.867318 | -87.625199 | 41.867463 | -87.625158 | TBA295579366000 | 57137334115 | 16.44 |
| 41.823113 | -87.773061 | 41.823028 | -87.772978 | TBA295889245000 | 609866840 | 11.7 |
| 41.880609 | -87.643551 | 41.880643 | -87.643825 | TBA296616086000 | 73353853103 | 23 |
| 41.879607 | -87.787703 | 41.87942 | -87.787827 | TBA297207405000 | 1.52921E+11 | 23.22 |
Образец набора данных для таблицы маршрутов
| route_id | tracking_id |
|-------------|-----------------|
| 5606318-230 | TBA291146931000 |
| 5615178-242 | TBA291146931000 |
| 5608371-231 | TBA291146931000 |
| 5619196-12 | TBA294192909000 |
| 5615178-249 | TBA294636573000 |
| 5615178-15 | TBA295159303000 |
| 5615178-266 | TBA295399226000 |
| 5608971-29 | TBA295399226000 |
| 5616765-168 | TBA295579366000 |
| 5615178-43 | TBA295889245000 |
| 5611715-191 | TBA296616086000 |
| 5615178-239 | TBA296616086000 |
| 5613961-24 | TBA296616086000 |
| 5615178-46 | TBA297207405000 |
| 5615178-45 | TBA297381148000 |
| 5615178-327 | TBA297914514000 |
| 5615178-122 | TBA298006586000 |
| 5615178-220 | TBA298012265000 |
| 5615178-203 | TBA298150824000 |
| 5615178-4 | TBA298172704000 |
Текущий конечный вывод (неверно, так как количество пакетов должно быть 16 для этого адреса адреса назначения):
| zero_to_ten_percentage | eleven_to_twenty_percentage | twenty_to_fifty_percentage | gt_50_percentage | destination_address_id | route_id | total_packages |
|------------------------|-----------------------------|----------------------------|------------------|------------------------|-------------|----------------|
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5726011-18 | 73 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5132076-67 | 73 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5741216-13 | 73 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5722811-179 | 73 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5647148-145 | 73 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5701985-94 | 73 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5657147-148 | 73 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5713302-122 | 73 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5627191-48 | 73 |
Желаемый вывод:
| zero_to_ten_percentage | eleven_to_twenty_percentage | twenty_to_fifty_percentage | gt_50_percentage | destination_address_id | route_id | total_packages |
|------------------------|-----------------------------|----------------------------|------------------|------------------------|-------------|----------------|
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5726011-18 | 16 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5132076-67 | 16 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5741216-13 | 16 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5722811-179 | 16 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5647148-145 | 16 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5701985-94 | 16 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5657147-148 | 16 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5713302-122 | 16 |
| 50.6849315 | 41.0958904 | 4.109589 | 0 | 100529310603 | 5627191-48 | 16 |
CREATE TEMPORARY TABLE T3 AS
SELECT DISTINCT T2_2.lat1
,T2_2.long1
,T2_2.actual_lat
,T2_2.actual_long
,T2_2.tracking_id
,T2_2.destination_address_id
,round((CASE WHEN ((lat1 IS NOT NULL AND lat1 != '')
AND (lat1 = actual_lat)
AND (actual_long IS NOT NULL AND actual_long != '') AND (long1 = actual_long)) THEN 0
WHEN ((lat1 IS NOT NULL AND lat1 != '')
AND (long1 IS NOT NULL AND long1 != '')
AND (actual_lat IS NOT NULL AND actual_lat != '')
AND (actual_long IS NOT NULL AND actual_long != ''))
THEN (ACOS(ROUND(COS(ACOS(- 1) / 180 * (90 - lat1)) * COS(ACOS(- 1) / 180 * (90 - actual_lat))
+ SIN(ACOS(- 1) / 180 * (90 -lat1)) * SIN(ACOS(- 1) / 180 * (90 - actual_lat)) * COS(ACOS(- 1) / 180
* (long1 - actual_long)), 20)) * 6378137
) ELSE NULL END
), 2) distance
FROM T2_2
GROUP BY 1, 2, 3 , 4, 5, 6
ORDER BY tracking_id
;
CREATE TEMPORARY TABLE route AS
SELECT DISTINCT route_id,
tracking_id
FROM routing_na.actuals
WHERE tracking_id IN (SELECT DISTINCT tracking_id FROM T3)
ORDER BY tracking_id
;
CREATE TEMPORARY TABLE T3_final AS
SELECT DISTINCT distance
,T3.tracking_id
,destination_address_id
,route_id
FROM T3, route
WHERE T3.tracking_id = route.tracking_id
ORDER BY T3.tracking_id
;
CREATE TEMPORARY TABLE packages AS
SELECT COUNT(DISTINCT tracking_id) packs
,destination_address_id
FROM T3_final
GROUP by destination_address_id
;
CREATE TEMPORARY TABLE T4 AS /* Doing some percentage calculations based on the new buckets created in the previous temp table namely percentage calculations out of total */
SELECT SUM(CASE WHEN distance BETWEEN 0 AND 10 THEN 1 ELSE 0 END)a
,SUM(CASE WHEN distance BETWEEN 11 AND 20 THEN 1 ELSE 0 END)b
,SUM(CASE WHEN distance BETWEEN 21 AND 50 THEN 1 ELSE 0 END)c
,SUM(CASE WHEN distance > 50 THEN 1 ELSE 0 END)d
,packages.destination_address_id
,a/packs::DECIMAL(10,2) * 100 AS e
,b/packs::DECIMAL(10,2) * 100 AS f
,c/packs::DECIMAL(10,2) * 100 AS g
,d/packs::DECIMAL(10,2) * 100 AS h
,packs AS Total_packages
FROM T3_final, packages
WHERE T3_final.destination_address_id = packages.destination_address_id
GROUP BY packages.destination_address_id,packs
ORDER BY packages.destination_address_id
;
SELECT DISTINCT e zero_to_ten_percentage
,f eleven_to_twenty_percentage
,g twenty_to_fifty_percentage
,h gt_50_percentage
,T4.destination_address_id
,route_id
,Total_packages
FROM T3_final, T4
WHERE T3_final.destination_address_id = T4.destination_address_id
ORDER BY T4.destination_address_id
;
Фактический номер идентификатора отслеживания для определенного адресата_адреса