diff --git a/pkg/datastore/sqlstore/migrations/postgres/10_alter_numeric_column_precision.sql b/pkg/datastore/sqlstore/migrations/postgres/10_alter_numeric_column_precision.sql new file mode 100644 index 0000000..d26c849 --- /dev/null +++ b/pkg/datastore/sqlstore/migrations/postgres/10_alter_numeric_column_precision.sql @@ -0,0 +1,12 @@ +-- +migrate Up + +ALTER TABLE daily_site_stats ALTER COLUMN bounce_rate TYPE NUMERIC; +ALTER TABLE daily_page_stats ALTER COLUMN bounce_rate TYPE NUMERIC; +ALTER TABLE daily_referrer_stats ALTER COLUMN bounce_rate TYPE NUMERIC; +ALTER TABLE daily_site_stats ALTER COLUMN avg_duration TYPE NUMERIC; +ALTER TABLE daily_page_stats ALTER COLUMN avg_duration TYPE NUMERIC; +ALTER TABLE daily_referrer_stats ALTER COLUMN avg_duration TYPE NUMERIC; + +-- +migrate Down + + diff --git a/pkg/datastore/sqlstore/page_stats.go b/pkg/datastore/sqlstore/page_stats.go index 262611e..cdd0ae8 100644 --- a/pkg/datastore/sqlstore/page_stats.go +++ b/pkg/datastore/sqlstore/page_stats.go @@ -28,7 +28,7 @@ func (db *sqlstore) insertPageStats(s *models.PageStats) error { } func (db *sqlstore) updatePageStats(s *models.PageStats) error { - query := db.Rebind(`UPDATE daily_page_stats SET pageviews = ?, visitors = ?, entries = ?, bounce_rate = ROUND(?, 4), avg_duration = ROUND(?, 4), known_durations = ? WHERE site_id = ? AND hostname = ? AND pathname = ? AND date = ?`) + query := db.Rebind(`UPDATE daily_page_stats SET pageviews = ?, visitors = ?, entries = ?, bounce_rate = ?, avg_duration = ?, known_durations = ? WHERE site_id = ? AND hostname = ? AND pathname = ? AND date = ?`) _, err := db.Exec(query, s.Pageviews, s.Visitors, s.Entries, s.BounceRate, s.AvgDuration, s.KnownDurations, s.SiteID, s.Hostname, s.Pathname, s.Date.Format("2006-01-02")) return err } @@ -41,8 +41,8 @@ func (db *sqlstore) GetAggregatedPageStats(siteID int64, startDate time.Time, en SUM(pageviews) AS pageviews, SUM(visitors) AS visitors, SUM(entries) AS entries, - COALESCE(ROUND(SUM(entries*bounce_rate) / NULLIF(SUM(entries), 0), 4), 0.00) AS bounce_rate, - COALESCE(ROUND(SUM(avg_duration*pageviews) / SUM(pageviews), 4), 0.00) AS avg_duration + COALESCE(SUM(entries*bounce_rate) / NULLIF(SUM(entries), 0), 0.00) AS bounce_rate, + COALESCE(SUM(avg_duration*pageviews) / SUM(pageviews), 0.00) AS avg_duration FROM daily_page_stats WHERE site_id = ? AND date >= ? AND date <= ? GROUP BY hostname, pathname ORDER BY pageviews DESC LIMIT ?`) diff --git a/pkg/datastore/sqlstore/referrer_stats.go b/pkg/datastore/sqlstore/referrer_stats.go index 8896faa..f15592b 100644 --- a/pkg/datastore/sqlstore/referrer_stats.go +++ b/pkg/datastore/sqlstore/referrer_stats.go @@ -28,7 +28,7 @@ func (db *sqlstore) insertReferrerStats(s *models.ReferrerStats) error { } func (db *sqlstore) updateReferrerStats(s *models.ReferrerStats) error { - query := db.Rebind(`UPDATE daily_referrer_stats SET visitors = ?, pageviews = ?, bounce_rate = ROUND(?, 4), avg_duration = ROUND(?, 4), known_durations = ?, groupname = ? WHERE site_id = ? AND hostname = ? AND pathname = ? AND date = ?`) + query := db.Rebind(`UPDATE daily_referrer_stats SET visitors = ?, pageviews = ?, bounce_rate = ?, avg_duration = ?, known_durations = ?, groupname = ? WHERE site_id = ? AND hostname = ? AND pathname = ? AND date = ?`) _, err := db.Exec(query, s.Visitors, s.Pageviews, s.BounceRate, s.AvgDuration, s.KnownDurations, s.Group, s.SiteID, s.Hostname, s.Pathname, s.Date.Format("2006-01-02")) return err } @@ -42,8 +42,8 @@ func (db *sqlstore) GetAggregatedReferrerStats(siteID int64, startDate time.Time COALESCE(MIN(groupname), '') AS groupname, SUM(visitors) AS visitors, SUM(pageviews) AS pageviews, - COALESCE(ROUND(SUM(pageviews*NULLIF(bounce_rate, 0)) / SUM(pageviews), 4), 0.00) AS bounce_rate, - COALESCE(ROUND(SUM(avg_duration*pageviews) / SUM(pageviews), 4), 0.00) AS avg_duration + COALESCE(SUM(pageviews*NULLIF(bounce_rate, 0)) / SUM(pageviews), 0.00) AS bounce_rate, + COALESCE(SUM(avg_duration*pageviews) / SUM(pageviews), 0.00) AS avg_duration FROM daily_referrer_stats WHERE site_id = ? AND date >= ? AND date <= ? ` diff --git a/pkg/datastore/sqlstore/site_stats.go b/pkg/datastore/sqlstore/site_stats.go index cb0336a..8c5fafb 100644 --- a/pkg/datastore/sqlstore/site_stats.go +++ b/pkg/datastore/sqlstore/site_stats.go @@ -29,7 +29,7 @@ func (db *sqlstore) insertSiteStats(s *models.SiteStats) error { } func (db *sqlstore) updateSiteStats(s *models.SiteStats) error { - query := db.Rebind(`UPDATE daily_site_stats SET visitors = ?, sessions = ?, pageviews = ?, bounce_rate = ROUND(?, 4), avg_duration = ROUND(?, 4), known_durations = ? WHERE site_id = ? AND date = ?`) + query := db.Rebind(`UPDATE daily_site_stats SET visitors = ?, sessions = ?, pageviews = ?, bounce_rate = ?, avg_duration = ?, known_durations = ? WHERE site_id = ? AND date = ?`) _, err := db.Exec(query, s.Visitors, s.Sessions, s.Pageviews, s.BounceRate, s.AvgDuration, s.KnownDurations, s.SiteID, s.Date.Format("2006-01-02")) return err } @@ -48,8 +48,8 @@ func (db *sqlstore) GetAggregatedSiteStats(siteID int64, startDate time.Time, en COALESCE(SUM(pageviews), 0) AS pageviews, COALESCE(SUM(visitors), 0) AS visitors, COALESCE(SUM(sessions), 0) AS sessions, - COALESCE(ROUND(SUM(pageviews*avg_duration) / NULLIF(SUM(pageviews), 0), 4), 0.00) AS avg_duration, - COALESCE(ROUND(SUM(sessions*bounce_rate) / NULLIF(SUM(sessions), 0), 4), 0.00) AS bounce_rate + COALESCE(SUM(pageviews*avg_duration) / NULLIF(SUM(pageviews), 0), 0.00) AS avg_duration, + COALESCE(SUM(sessions*bounce_rate) / NULLIF(SUM(sessions), 0), 0.00) AS bounce_rate FROM daily_site_stats WHERE site_id = ? AND date >= ? AND date <= ? LIMIT 1`) err := db.Get(stats, query, siteID, startDate.Format("2006-01-02"), endDate.Format("2006-01-02")) return stats, mapError(err) @@ -80,7 +80,7 @@ func (db *sqlstore) GetTotalSiteSessions(siteID int64, startDate time.Time, endD } func (db *sqlstore) GetAverageSiteDuration(siteID int64, startDate time.Time, endDate time.Time) (float64, error) { - sql := `SELECT COALESCE(ROUND(SUM(pageviews*avg_duration)/SUM(pageviews), 4), 0.00) FROM daily_site_stats WHERE site_id = ? AND date >= ? AND date <= ?` + sql := `SELECT COALESCE(SUM(pageviews*avg_duration)/SUM(pageviews), 0.00) FROM daily_site_stats WHERE site_id = ? AND date >= ? AND date <= ?` query := db.Rebind(sql) var total float64 err := db.Get(&total, query, siteID, startDate.Format("2006-01-02"), endDate.Format("2006-01-02")) @@ -88,7 +88,7 @@ func (db *sqlstore) GetAverageSiteDuration(siteID int64, startDate time.Time, en } func (db *sqlstore) GetAverageSiteBounceRate(siteID int64, startDate time.Time, endDate time.Time) (float64, error) { - sql := `SELECT COALESCE(ROUND(SUM(sessions*bounce_rate)/SUM(sessions), 4), 0.00) FROM daily_site_stats WHERE site_id = ? AND date >= ? AND date <= ?` + sql := `SELECT COALESCE(SUM(sessions*bounce_rate)/SUM(sessions), 4) FROM daily_site_stats WHERE site_id = ? AND date >= ? AND date <= ?` query := db.Rebind(sql) var total float64 err := db.Get(&total, query, siteID, startDate.Format("2006-01-02"), endDate.Format("2006-01-02"))