```
CREATE TABLE t (x UInt8, PROJECTION p (SELECT x GROUP BY x)) ENGINE = MergeTree ORDER BY ();
INSERT INTO t VALUES (0);

SET group_by_overflow_mode = 'any', max_rows_to_group_by = 1000, totals_mode = 'after_having_auto';
SELECT x FROM t GROUP BY x WITH TOTALS;
```
continue;
        LOG_DEBUG(log, "Freezing part {} snapshot will be placed at {}", part->name, backup_path);
        auto data_part_storage = part->getDataPartStoragePtr();
        String backup_part_path = fs::path(backup_path) / relative_data_path;
        scope_guard src_flushed_tmp_dir_lock;
        MergeTreeData::MutableDataPartPtr src_flushed_tmp_part;
        if (auto part_in_memory = asInMemoryPart(part))
        {
            auto flushed_part_path = *part_in_memory->getRelativePathForPrefix("tmp_freeze");
            src_flushed_tmp_dir_lock = part->storage.getTemporaryPartDirectoryHolder("tmp_freeze" + part->name);
            auto flushed_part_storage = part_in_memory->flushToDisk(flushed_part_path, metadata_snapshot);
            src_flushed_tmp_part = createPart(part->name, part->info, flushed_part_storage);
            src_flushed_tmp_part->is_temp = true;
            data_part_storage = flushed_part_storage;
        }
        auto callback = [this, &part, &backup_part_path](const DiskPtr & disk)
        {
            
            
            createAndStoreFreezeMetadata(disk, part, fs::path(backup_part_path) / part->getDataPartStorage().getPartDirectory());
        };
        auto new_storage = data_part_storage->freeze(
            backup_part_path,
            part->getDataPartStorage().getPartDirectory(),
             true,
            callback,
             false,
            {});
        part->is_frozen.store(true, std::memory_order_relaxed);
        result.push_back(PartitionCommandResultInfo{