SQL Sorgu ve Stored Procedure
Tablo yapım;
Payment_ID | Payment_Parent | Payment_Amount | Payment_Method | Payment_Status |
---|---|---|---|---|
1 | 1 | 600.00 | N | 1 |
2 | 2 | 400.00 | K | 1 |
SQL Sorgum;
SELECT
Payment_Parent,
Payment_Method,
COUNT(*) as Payment_Count,
SUM(Payment_Amount) as Payment_SUM
FROM payment_payment
WHERE Payment_Status = '1'
GROUP BY Payment_Parent
ORDER BY Payment_Parent ASC
Örnek Çıktı;
Payment_Parent | Payment_Method | Payment_Count | Payment_SUM |
---|---|---|---|
1 | N | 62 | 45400.00 |
Mümkünmü bilmiyorum, yapılabilirse çıktının aşağıdaki gibi olmasını istiyorum;
Payment_Parent | Payment_Method | Payment_Count | Payment_SUM_N | Payment_SUM_K |
---|---|---|---|---|
1 | N | 62 | 25000.00 | 20400.00 |
Tabi birde konu ile pekde alakalı değil ancak yeri gelmişken sormak istedim. Bu sorguyu Stored Procedure ile kullanıyorum. PHP dosyasındaki normal sorgu ile Stored Procedure arasında bir performans farkı varmı. Ben pek bir fark göremedim.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (3)
Sum kısmını aşağıdaki mantıkta yazıp dener misin? yalnız kontrol et hatalı yazmış olabilirim.
sum case yapısı kullanılacak sanırım. doğru olmadıysa ona göre arama yap doğru uygulamayı bulursun sanırım.
SUM(CASE
WHEN payment_method == 'N' THEN payment_amount
ELSE 0 END) AS payment_sum_N,
SUM (CASE
WHEN payment_method == 'K' THEN payment_amount
ELSE 0
END) AS payment_sum_K
Merhaba,
Tâbikide arada uçurum var. Stored procedure'ler prepared sorgular olduğundan query plan sadece bir kere hazırlanıyor ve cache'leniyor. Haliyle normal bir sorguyu bir milyon kere çalıştırmak ile stored procedure/prepared query çalıştırmak arasında ciddi bir performans farkı her zaman hissedilir.
@rephp7 desteğin için tşkler, bende aşağıdaki gibi yazmıştım
SUM(CASE WHEN Payment_Method = 'N' THEN Payment_Amount ELSE '' END) AS Payment_SUMN,
SUM(CASE WHEN Payment_Method = 'K' THEN Payment_Amount ELSE '' END) AS Payment_SUMK,
boş string yerine "0" yazmam gerekiyormuş, tekrar tşkler...