**Describe the bug**
It's not possible to compare Decimal and Float values. But actually both of them point to some specific value on real number line, so we can compare and that wouldn't produce any precision loss.

**How to reproduce**
Clickhouse 21.5
```
SELECT toDecimal32('11.00', 2) > 1.

Query id: f2c1cba1-748e-42ea-83ac-e117b542d576


0 rows in set. Elapsed: 0.002 sec.

Received exception from server (version 21.5.1):
Code: 43. DB::Exception: Received from localhost:9000. DB::Exception: No operation greater between Decimal(9, 2) and Float64: While processing toDecimal32('11.00', 2) > 1..
```



Loosely related https://github.com/ClickHouse/ClickHouse/issues/5690
virtual bool lowCardinality() const { return false; }
    
    virtual bool isLowCardinalityNullable() const { return false; }
    
    virtual bool canBeInsideLowCardinality() const { return false; }
    
    static void updateAvgValueSizeHint(const IColumn & column, double & avg_value_size_hint);
protected:
    friend class DataTypeFactory;
    friend class AggregateFunctionSimpleState;
    
    void setCustomization(DataTypeCustomDescPtr custom_desc_) const;
    
    mutable DataTypeCustomNamePtr custom_name;
    mutable SerializationPtr custom_serialization;
public:
    const IDataTypeCustomName * getCustomName() const { return custom_name.get(); }
    const ISerialization * getCustomSerialization() const { return custom_serialization.get(); }
private:
    template <typename Ptr>
    Ptr getForSubcolumn(
        const String & subcolumn_name,
        const SubstreamData & data,
        Ptr SubstreamData::*member,
        bool throw_if_null = true) const;
};
struct WhichDataType
{
    TypeIndex idx;
    constexpr WhichDataType(TypeIndex idx_ = TypeIndex::Nothing) : idx(idx_) {}