add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE tablename (`ID` INTEGER, `Group` VARCHAR(1), `value` FLOAT, `weight` INTEGER);

INSERT INTO tablename (`ID`, `Group`, `value`, `weight`) VALUES
('1', 'A', '2.0', '1'),
('2', 'A', '1.5', '2'),
('3', 'A', '50.0', '1'),
('4', 'A', '1', '3'),
('5', 'A', '100', '2'),
('6', 'B', '25', '1'),
('7', 'B', '2', '2'),
('8', 'B', '1', '1'),
('9', 'B', '10', '1');
SELECT `Group`, SUM(value * weight) / SUM(weight) avg_value
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY `Group` ORDER BY value DESC) rn
FROM tablename
) t
WHERE rn > 2
GROUP BY `Group`
Group avg_value
A 1.3333333333333333
B 1.6666666666666667
SELECT `Group`, SUM(value * weight) / SUM(weight) avg_value
FROM (
SELECT *, RANK() OVER (PARTITION BY `Group` ORDER BY value DESC) rn
FROM tablename
) t
WHERE rn > 2
GROUP BY `Group`
Group avg_value
A 1.3333333333333333
B 1.6666666666666667
SELECT `Group`, SUM(value * weight) / SUM(weight) avg_value
FROM (
SELECT *, DENSE_RANK() OVER (PARTITION BY `Group` ORDER BY value DESC) rn
FROM tablename
) t
WHERE rn > 2
GROUP BY `Group`
Group avg_value
A 1.3333333333333333
B 1.6666666666666667