This commit is contained in:
Pavel 2024-06-19 17:51:34 +03:00
parent 7b29c987a9
commit cf45d440fc

@ -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
}