update query

This commit is contained in:
Pavel 2024-03-15 16:02:09 +03:00
parent db75b0e515
commit 621de17c77
2 changed files with 89 additions and 1 deletions

@ -317,4 +317,71 @@ FROM answer a
WHERE a.id = ANY($1::bigint[]) AND a.deleted = FALSE AND q.accountid = $2 AND a.start = false;
-- name: CheckResultOwner :one
SELECT q.accountid FROM answer a JOIN quiz q ON a.quiz_id = q.id WHERE a.id = $1 AND a.deleted = FALSE AND a.start = false;
SELECT q.accountid FROM answer a JOIN quiz q ON a.quiz_id = q.id WHERE a.id = $1 AND a.deleted = FALSE AND a.start = false;
-- name:DeviceStats :many
WITH DeviceStats AS (
SELECT
device_type,
COUNT(*) AS device_count
FROM
answer
WHERE
quiz_id = $1
AND created_at >= to_timestamp($2)
AND created_at <= to_timestamp($3)
AND result = TRUE
GROUP BY
device_type
),
OSStats AS (
SELECT
os,
COUNT(*) AS os_count
FROM
answer
WHERE
quiz_id = $1
AND created_at >= to_timestamp($2)
AND created_at <= to_timestamp($3)
AND result = TRUE
GROUP BY
os
),
BrowserStats AS (
SELECT
browser,
COUNT(*) AS browser_count
FROM
answer
WHERE
quiz_id = $1
AND created_at >= to_timestamp($2)
AND created_at <= to_timestamp($3)
AND result = TRUE
GROUP BY
browser
),
TotalStats AS (
SELECT
COUNT(*) AS total_count
FROM
answer
WHERE
quiz_id = $1
AND created_at >= to_timestamp($2)
AND created_at <= to_timestamp($3)
AND result = TRUE
)
SELECT
device_type,
(device_count::FLOAT / total_count) * 100 AS device_percentage,
os,
(os_count::FLOAT / total_count) * 100 AS os_percentage,
browser,
(browser_count::FLOAT / total_count) * 100 AS browser_percentage
FROM
DeviceStats,
OSStats,
BrowserStats,
TotalStats;

@ -1,6 +1,7 @@
package statistics
import (
"context"
"database/sql"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen"
)
@ -21,3 +22,23 @@ func NewStatisticsRepo(deps Deps) *StatisticsRepository {
pool: deps.Pool,
}
}
type DeviceStatReq struct {
QuizId string
From uint64
To uint64
}
type DeviceStatResp struct {
Device map[string]float64
OS map[string]float64
Browser map[string]float64
}
func (r *StatisticsRepository) GetDeviceStatistics(ctx context.Context, req DeviceStatReq) DeviceStatResp {
resp := DeviceStatResp{
Device: make(map[string]float64),
OS: make(map[string]float64),
Browser: make(map[string]float64),
}
}