diff --git a/netquery/query.go b/netquery/query.go index 06b766f6..1e60b7fa 100644 --- a/netquery/query.go +++ b/netquery/query.go @@ -53,6 +53,7 @@ type ( Sum struct { Condition Query `json:"condition"` + Field string `json:"field"` As string `json:"as"` Distinct bool `json:"distinct"` } diff --git a/netquery/query_handler.go b/netquery/query_handler.go index d82feb8f..bca2eac3 100644 --- a/netquery/query_handler.go +++ b/netquery/query_handler.go @@ -218,8 +218,11 @@ func (req *QueryRequestPayload) prepareSelectedFields(ctx context.Context, schem case s.Distinct != nil: field = *s.Distinct case s.Sum != nil: - // field is not used in case of $sum - field = "*" + if s.Sum.Field != "" { + field = s.Sum.Field + } else { + field = "*" + } case s.Min != nil: if s.Min.Field != "" { field = s.Min.Field @@ -261,9 +264,19 @@ func (req *QueryRequestPayload) prepareSelectedFields(ctx context.Context, schem return fmt.Errorf("missing 'as' for $sum") } - clause, params, err := s.Sum.Condition.toSQLWhereClause(ctx, fmt.Sprintf("sel%d", idx), schema, orm.DefaultEncodeConfig) - if err != nil { - return fmt.Errorf("in $sum: %w", err) + var ( + clause string + params map[string]any + ) + + if s.Sum.Field != "" { + clause = s.Sum.Field + } else { + var err error + clause, params, err = s.Sum.Condition.toSQLWhereClause(ctx, fmt.Sprintf("sel%d", idx), schema, orm.DefaultEncodeConfig) + if err != nil { + return fmt.Errorf("in $sum: %w", err) + } } req.mergeParams(params)