2016-04-02 16 views
0

Belirli bir günde yayınlanan yayın başına ortalama müzik parçası sayısını bulmak için bir sorgu oluşturmaya çalışıyorum.Saat başına düşen öğe sayısını sayın, ardından sonucun ortalamasını bulun

Bir parça çalındığında, bir datetime değerine (oluşturulan alan) bağlı olarak günlüğe kaydedilen bir tablom var.

Saat başına ne kadar girdi veya parçanın kaydedildiğini saymam gerekiyor.

Ardından, saatlik toplamlarla ortalamayı bulun.

Şimdiye kadar var, ama doğru olup olmadığını merak ettim mi? İtiraf etmeliyim

SELECT AVG(a.total) FROM (
    SELECT HOUR(created) AS hour, COUNT(id) AS total 
    FROM `music_log` r 
    WHERE DATE(created) = DATE(DATE_SUB(NOW() , INTERVAL 1 DAY)) group by HOUR(r.created) 
) a 

, başka görevinden stackoverflow ve ne bir ve r ortalama/referansını anlamıyorum formüle.

Bu hakkın olup olmadığını bilmek istiyorum, bu nedenle çeyrek (3 ay) sonuçları kapsayacak şekilde sorguyu genişletebilirim.

+0

Oldukça güzel görünüyor. DATE (oluşturuldu) dizininin bir dizin kullanamayacağını unutmayın. A ve r takma adlardır. R kesinlikle gerekli değil, ama bir. – Strawberry

+0

Doğru. Bu şekilde oluşturulan, tabloda bir dizin olamaz. Bu doğru mu? Daha önce hiç sorun yaşamadım. Oluşturulan – mattauckland

+0

dizine eklenebilir. DATE() bu dizinden yararlanamaz. Mümkünse (ve bazen değil), indeksin kullanılabileceği şekilde sorgu yazmak daha iyidir, örn. : 'NEREDEN '2016-04-02 00:00:00' OLDUĞU 'VE' 2016-04-02 23: 59: 59 '; – Strawberry

cevap

0

Strawberry'in dediği gibi, doğru yolda olduğumu düşünüyorum. Teşekkürler Çilek.

Bunu genişletmek için ve yalnızca başkalarına yardımcı olması durumunda, bu çeyreği kapsayacak şekilde sorguyu dahil ettim, bu durumda bu yılın ilk çeyreği .... benim sorgum :)

SELECT AVG(a.total) FROM (
    SELECT DATE(created) as day, HOUR(created) AS hour, COUNT(id) AS total 
    FROM `music_log` 
    WHERE QUARTER(created) = 1 
    AND YEAR(created) = YEAR(NOW()) 
    group by DATE(created), HOUR(created) 
) a 

Doğru bir şekilde hesaplayabilmek için, saatlik sonuçları Tarih ve Saat'e göre gruplandırmam gerekiyordu.

Sorudaki önceki sorguda, yalnızca Saat'e göre gruplanıyordu. Ortalama hesaplama, sadece bir gün bittiğinde, ancak bu bir günü aştığında, sonuçlar yanlış hale gelirse iyi olur. Bunun nedeni, örneğin, her iki olayın toplam sayısını da ekleyeceğidir, örneğin, ortalamayı hesaplayın.

SELECT COUNT(*)/COUNT(DISTINCT DATE(created), HOUR(created)) as average 
FROM `music_log` 
WHERE QUARTER(created) = 1 AND YEAR(created) = YEAR(NOW()) ; 

Bu hesaplar: Bir alt sorgu olmadan ortalamasını hesaplayabilirsiniz

1

); yardımcı olur ... yoksa bir hata yaptık, ben birisi üzerine alır umut

Umut Bir alt soruna gerek kalmadan toplam sayım ve saat sayısı.

İlgili konular