From cf45d440fcd5fc65b94c1f42e537567f03426b5e Mon Sep 17 00:00:00 2001 From: Pavel Date: Wed, 19 Jun 2024 17:51:34 +0300 Subject: [PATCH] reworked --- repository/statistics/click_statistics.go | 41 ++++++++--------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/repository/statistics/click_statistics.go b/repository/statistics/click_statistics.go index 40f2aa9..52b9025 100644 --- a/repository/statistics/click_statistics.go +++ b/repository/statistics/click_statistics.go @@ -59,7 +59,7 @@ type Statistic struct { QuestionID int64 } -type PipeLineStatsResp [][]Statistic +type PipeLineStatsResp map[int64][]Statistic // пример: //"[0, 116783, 116810]" @@ -77,7 +77,7 @@ type PipeLineStatsResp [][]Statistic func (s *StatisticClick) getFunnel(ctx context.Context, quizID int64, from uint64, to uint64) (map[int64][]int64, error) { query := ` SELECT DISTINCT last_que, reversed - FROM ( SELECT groupArray(ctxquestionid) AS reversed, arraySlice(arrayReverse(groupArray(ctxquestionid)), 1, 1)[1] AS last_que + FROM ( SELECT groupUniqArray(ctxquestionid) AS reversed, arraySlice(arrayReverse(groupArray(ctxquestionid)), 1, 1)[1] AS last_que FROM statistics WHERE ctxquizid = ? AND event_time BETWEEN ? AND ? GROUP BY ctxsession ) AS sub; ` @@ -134,40 +134,27 @@ func (s *StatisticClick) getFunnel(ctx context.Context, quizID int64, from uint6 } func (s *StatisticClick) GetPipelinesStatistics(ctx context.Context, quizID int64, from uint64, to uint64) (PipeLineStatsResp, error) { - var pipelines PipeLineStatsResp + pipelines := make(PipeLineStatsResp) - // получили id вопросов воронок где массив состоит из 1 элемента funnel, err := s.getFunnel(ctx, quizID, from, to) if err != nil { return nil, err } - fmt.Println(funnel) - var idS []int64 - for queID := range funnel { - idS = append(idS, queID) - } - - if len(idS) == 0 { - return nil, nil - } - // тут считаем количество ответов на эти вопросы по уникальным сессиям - sesCount, err := s.countSession(ctx, quizID, from, to, idS) - if err != nil { - return nil, err - } - - for questionID := range funnel { - if sessionCount, ok := sesCount[questionID]; ok { - pipeline := []Statistic{ - { - QuestionID: questionID, + for lastQue, idS := range funnel { + sesCount, err := s.countSession(ctx, quizID, from, to, idS) + if err != nil { + return nil, err + } + for _, queID := range idS { + if sessionCount, ok := sesCount[queID]; ok { + pipeline := Statistic{ + QuestionID: queID, Count: sessionCount, - }, + } + pipelines[lastQue] = append(pipelines[lastQue], pipeline) } - pipelines = append(pipelines, pipeline) } } - return pipelines, nil }