Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
iki tabloyu birleştirip hesaplama yapma
#1
merhaba;

arac, yakıt ve araç kilometre bilgilerinin olduğu üç tablom var, araçların km ve aldığı yakıt miktarlarının toplamlarını bir tabloda görmek istiyorum.
kullandığım sorgu aşağıdaki gibidir.

SELECT 
  a.plaka,
  Round(SUM(f.litre),2) AS toplam_Yakit,
  Round(SUM(m.toplam_mesafe),2) AS toplam_km
FROM 
  arac a, arac_yakit_fisi f, arac_gunluk_mesafe m
WHERE 
  (a.plaka=m.arac_plaka) and (a.plaka=f.plaka)
GROUP BY 
  a.plaka
 

bu sorgu; kayıtları tekrar ediyor ve toplamları yanlış getiriyor. yapmak istediğim araç listesinde 63AG999 plakalı bir araç var diyelim bu aracın yakıt toplamını yakıt fiş tablosundan toplayıp getirsin, birde bu aracın km bilgisini de günlük mesafe tablosunda toplayıp yakıt toplamının yanına km toplamını getirsin.

yardımlarınız için şimdiden teşekkürler.
WWW
Cevapla
#2
Şu konuyu inceleyin;

https://www.delphican.com/showthread.php?tid=93

YouTube Delphi Tips

"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" P.Safa
WWW
Cevapla
#3
(10-07-2020, Saat: 09:35)uparlayan Adlı Kullanıcıdan Alıntı: Şu konuyu inceleyin;

https://www.delphican.com/showthread.php?tid=93

öncelikle linkteki çalışmayı yapan arkadaşa teşekkür ediyorum. başlık açmadan öncede incelemiştim. joinlere biraz aşina olduğumu düşünüyorum. sorguyu aşağıdaki gibi kullandığım zaman hem çok yavaş hemde değerler çok büyük geliyor.

SELECT
 a.plaka,
 Round(SUM(f.litre),2) AS toplam_Yakit,
 Round(SUM(m.toplam_mesafe),2) AS toplam_km
FROM
 arac a
 left Join arac_yakit_fisi f on (a.plaka=f.plaka) 
 left Join arac_gunluk_mesafe m on (a.plaka=m.arac_plaka) 
GROUP BY
 a.plaka
WWW
Cevapla
#4
Join kurduğunuz alanlara index ekleyin.

YouTube Delphi Tips

"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" P.Safa
WWW
Cevapla
#5
(10-07-2020, Saat: 11:08)uparlayan Adlı Kullanıcıdan Alıntı: Join kurduğunuz alanlara index ekleyin.

@uparlayan 'ın da belirttiği gibi eğer yoksa her üç tablonun da plaka alanarı üzerinde indeks tanımlaması yapmak ilk işiniz olsun. Ayrıca toplamları alt sorgu ile hesapladıktan sonra asıl tabloya join ile bağlamakta fayda var.
SELECT
 a.plaka,
 Round(f.litre,2) AS toplam_Yakit,
 Round(m.toplam_mesafe,2) AS toplam_km
FROM arac a
left Join (select plaka, SUM(litre) litre from arac_yakit_fisi) f on (a.plaka=f.plaka) 
left Join (select plaka, SUM(toplam_mesafe) toplam_mesafe from arac_gunluk_mesafe) m on (a.plaka=m.arac_plaka) 
Cevapla
#6
merhaba;

MÜKEMMEL OLDU, veriler doğru gibi görünüyor. hızlı da çalışıyor. iyi ki varsınız.
kodun son hali;

SELECT
 a.plaka,
 ROUND(f.litre,2) AS toplam_Yakit,
 ROUND(m.toplam_mesafe,2) AS toplam_km, 
 ROUND(m.calisma_suresi/3600,2) AS toplam_calisma
FROM arac a
 left Join (select plaka, SUM(litre) AS litre from arac_yakit_fisi Group By plaka) f on (a.plaka=f.plaka)
 left Join (select arac_plaka, SUM(toplam_mesafe) AS toplam_mesafe, SUM(calisma_suresi_saniye) AS calisma_suresi
 from arac_gunluk_mesafe Group By arac_plaka) m on (a.plaka=m.arac_plaka)

çok teşekkür ederim.
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Birden fazla id tutulacak tabloyu parçalamak mı yoksa tek tabloda birleştirmek mi man onurakman 7 1.535 10-01-2020, Saat: 18:23
Son Yorum: adelphiforumz
  Önermiyorum - 7 (Update ettiğin tabloyu Where kısmında kullanamazsın) Tuğrul HELVACI 14 3.483 04-01-2019, Saat: 14:12
Son Yorum: mad85



Konuyu Okuyanlar: 1 Ziyaretçi