Starting like @HenrikSchumacher suggests:

    data = Join[RandomReal[{0, 4}, {5, 6, 780, 90, 1}], RandomReal[{0, 1}, {5, 6, 780, 90, 1}], 5];
    data1 = Flatten[data, 3];

For each data point, round the $x$-coordinate down to the nearest thousandth (you may use `Round` instead of `Floor` to define the bins, depending on what exactly you need):

    data2 = {Floor[#[[1]], 0.001], #[[2]]} & /@ data1;

Gather together all data points with the same $x$-coordinate (rounded down to the nearest thousandth):

    A = GatherBy[data2, First];

From these gathered lists, calculate for each bin (i) the $x$-value and (ii) the sum of the $y$-values (or the mean, or length, or whatever):

    B = (#[[1, 1]] -> Total[#[[All, 2]]]) & /@ A;

The results in `B` are in random order.
Make an ordered list of all bins and their sum:

    bins = Range[0, 4, 0.001];
    Transpose[{bins, Lookup[B, bins, 0]}]

> {{0, ...}, {0.001, ...}, {0.002, ...}, ..., {4, ...}}

(The dots stand for the sum values in each bin.)