Подзапрос LOBase HSQL данных подгруппы

У меня есть база данных о моих велопрогулках, которую я использую для изучения SQL с помощью Libreoffice Base и HSQL. База данных состоит из таблицы со столбцами для: индекса, даты, велосипеда, миль.

Что я хотел бы сделать, так это создать столбец с суммами поездок на велосипеде за каждый год для моих шоссейных велосипедов и еще один для моих велосипедов mtn. Я начал с суммы подзапроса, но это дает мне общую сумму для всей базы данных. Вот мой код для дорожных велосипедов, другой подзапрос будет использоваться для столбца mtn bikes:

SELECT YEAR( "RideDate" ) AS "Year", SUM( "Miles" ) AS "Miles", 
( SELECT SUM( "Miles" ) FROM "BikeDate" 
   WHERE( "Bike" = 'Fuji' OR "Bike" = 'Yfoil' )) AS "% Miles" 
FROM "BikeDate" AS "BikeDate" 
GROUP BY YEAR( "RideDate" ) 
ORDER BY YEAR( "RideDate" ) DESC

Поскольку я группирую по годам, как мне получить сумму для каждого элемента группировки-> года? Прошу прощения за незнание правильной терминологии. Я также не хочу делать простую сумму, где я группирую по годам и велосипедам, у меня это есть. Я хочу разбить сумму за год, используя предложение where. Любая помощь приветствуется, Дэйв. LOBase 4.2.3.3.


person user50506    schedule 15.07.2014    source источник


Ответы (1)


Позвольте мне предложить две возможности, в зависимости от того, что вам действительно нужно, чтобы вернуть значения, как в исходном сообщении:

SELECT 
   YEAR( "RideDate" ) AS "Year", 
   SUM( "Miles" ) AS "Miles", 
   SUM(CASE WHEN "Bike" = 'Fuji' OR "Bike" = 'Yfoil' THEN "Miles" ELSE 0 END) as "% Miles"
FROM "BikeDate" AS "BikeDate" 
GROUP BY YEAR( "RideDate" ) 
ORDER BY YEAR( "RideDate" ) DESC

Чтобы создать дополнительный столбец, который действительно вычисляет Percent . . . что-то вроде:

SELECT 
   YEAR( "RideDate" ) AS "Year", 
   SUM( "Miles" ) AS "Miles", 
   SUM(CASE WHEN "Bike" = 'Fuji' OR "Bike" = 'Yfoil' THEN "Miles" ELSE 0 END) as "Miles_Fuji_Yfoil",
   SUM(CASE WHEN "Bike" = 'Fuji' OR "Bike" = 'Yfoil' THEN "Miles" ELSE 0 END) * 100.0000000 / SUM("Miles") as "Pct_Miles_Fuji_Yfoil"
FROM "BikeDate" AS "BikeDate" 
GROUP BY YEAR( "RideDate" ) 
ORDER BY YEAR( "RideDate" ) DESC

Объяснение: используется функция HSQL CASE WHEN . . . ИЛИ . . . значение ELSE 0 END, так что будут только СУММ (агрегатная функция) эти значения.

person Sliderule    schedule 15.07.2014