**How to reproduce**

Query:
```sql
select
	x,
	min(x) as lower,
	max(x)+1 as upper,
	upper-lower as range
from (select arrayJoin([1, 2]) as x)
group by x
with rollup;
```

## 20.4.6
```
┌─x─┬─lower─┬─upper─┬─range─┐
│ 1 │     1 │     2 │     1 │
│ 2 │     2 │     3 │     1 │
└───┴───────┴───────┴───────┘
┌─x─┬─lower─┬─upper─┬─range─┐
│ 0 │     1 │     3 │     2 │
└───┴───────┴───────┴───────┘
```
Summary looks correct.

## 20.9.3
```
┌─x─┬─lower─┬─upper─┬─range─┐
│ 1 │     1 │     2 │     1 │
│ 2 │     2 │     3 │     1 │
└───┴───────┴───────┴───────┘
┌─x─┬─lower─┬─upper─┬─range─┐
│ 0 │     0 │     3 │     2 │
└───┴───────┴───────┴───────┘
```
`lower` is wrong - the minimum should be 1. However, all other "derived" values are correct. For example `range` correctly shows up as 2, even though table would wrongly imply that `upper-lower==3-0==3`.
Note that I only tested 20.4.6 and 20.9.3, so the regression might have been anywhere in between.

## 20.10.2
```
┌─x─┬─lower─┬─upper─┬─range─┐
│ 1 │     1 │     2 │     1 │
│ 2 │     2 │     3 │     1 │
└───┴───────┴───────┴───────┘
┌─x─┬─lower─┬─upper─┬─range─┐
│ 0 │     0 │     1 │     1 │
└───┴───────┴───────┴───────┘
```
All values are wrong.
if (implicit_distinct.empty())
            return {};
    }
    
    for (const auto & id : select.select()->children)
    {
        String alias = id->tryGetAlias();
        if (const auto * identifier = id->as<ASTIdentifier>())
        {
            const String & name = identifier->shortName();
            if (select.distinct || implicit_distinct.count(name))
            {
                if (alias.empty())
                    names.insert(name);
                else
                    names.insert(alias);
            }
        }
        else if (select.distinct && !alias.empty())
        {
            
            names.insert(alias);
        }
    }
    
    if (!select.distinct && names.size() != implicit_distinct.size())
        return {};
    return names;
}
void optimizeDuplicateDistinct(ASTSelectQuery & select)