reworked
This commit is contained in:
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
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user