Beispiel #1
0
        protected override string GetQueryStatement(string table, IEnumerable <string> quotedColumns)
        {
            const int indexOffset = 2;

            Columns = ColumnProjections.Select(p => p.Column).ToImmutableArray();

            var columnsFragment = string.Join(",", ColumnProjections.Select(p => p.Project()));

            var groupingSets = Enumerable.Range(0, Columns.Length)
                               .Except(RootIndices)
                               .Select(RootIndices.Append)
                               .Select(g => g.Select(i => i + indexOffset));

            var groupIndicesFragment = string.Join(",", groupingSets.Select(g => $"({string.Join(",", g)})"));

            return($@"
                select
                    grouping_id(
                        {columnsFragment}
                    ),
                    {columnsFragment},
                    count(*),
                    count_noise(*)
                from {table}
                group by grouping sets ({groupIndicesFragment})");
        }
Beispiel #2
0
        protected override string GetQueryStatement(string table, IEnumerable <string> quotedColumns)
        {
            Columns = ColumnProjections.Select(p => p.Column).ToImmutableArray();

            var columnsFragment = string.Join(",", ColumnProjections.Select(p => p.Project()));

            var groupingSets         = Enumerable.Range(2, Columns.Length).EnumeratePermutations(MaxGroupSize);
            var groupIndicesFragment = string.Join(",", groupingSets.Select(g => $"({string.Join(",", g)})"));

            return($@"
                select
                    grouping_id(
                        {columnsFragment}
                    ),
                    {columnsFragment},
                    count(*),
                    count_noise(*)
                from {table}
                group by grouping sets ({groupIndicesFragment})");
        }