В дополнение к отличному ответу ypercube, если вы хотите упростить дробь, вам нужно найти наибольший общий делитель.
Вот псевдокод для хранимой функции, которая может сгенерировать это:
CREATE FUNCTION gcd(x int, y int) RETURNS int DETERMINISTIC
BEGIN
DECLARE dividend int;
DECLARE divisor int;
DECLARE remainder int;
SET dividend := GREATEST(x, y);
SET remainder := LEAST(x, y);
WHILE remainder != 0 DO
SET divisor = remainder;
SET remainder = MOD(dividend, divisor);
SET dividend = divisor;
END WHILE;
RETURN divisor;
END
Теперь вы можете переписать запрос в:
SELECT (dividend/MyGCD) || '/' || (divisor/MyGCD) as FractionOfSums
, AverageOfFractions
FROM (
SELECT
SUM( dividend ) as dividend
, SUM( divisor ) AS divisor
, gcd(SUM( dividend ),SUM( divisor )) as MyGCD
, AVG( dividend / divisor ) AS AverageOfFractions
FROM (
SELECT CAST(substr(result, 1, position('/', result)-1 ) AS int) AS dividend
, CAST(substr(result, position('/', result)+1 ) AS int) AS divisor
FROM rows ) AS division
) as Elements
Обратите внимание, что GCD
- очень медленная функция.