SQLite - используйте CTE для разделения запроса - PullRequest
1 голос
/ 20 июня 2020

быстрый вопрос для тех SQL экспертов. Я чувствую себя немного глупо, потому что чувствую, что близок к решению, но не смог этого сделать.

Если у меня есть эти две таблицы, как я могу использовать первую для разделения столбца? второго?

WITH month_usage AS 
(SELECT strftime('%m', starttime) AS month, SUM(slots) AS total
 FROM Bookings
 GROUP BY month)

SELECT strftime('%m', b.starttime) AS month, f.name, SUM(slots) AS usage
FROM Bookings as b 
LEFT JOIN Facilities as f
ON b.facid = f.facid
GROUP BY name, month
ORDER BY month

Первый вычисляет сумму для каждого месяца

enter image description here

Второй - тот Я хочу разделить столбец использования на общую сумму каждого месяца, чтобы получить процент

enter image description here

Когда я присоединяюсь к обеим таблицам, используя месяц в качестве идентификатора, это портит вверх по содержанию, есть предложения?

1 Ответ

2 голосов
/ 20 июня 2020

Я хочу разделить столбец использования на сумму каждого месяца, чтобы получить процентное соотношение

Просто используйте оконные функции:

SELECT 
    strftime('%m', b.starttime) AS month, 
    f.name, 
    SUM(slots) AS usage
    1.0 * SUM(slots) AS usage 
        / SUM(SUM(slots)) OVER(PARTITION BY strftime('%m', b.starttime)) ratio
FROM Bookings as b 
LEFT JOIN Facilities as f
ON b.facid = f.facid
GROUP BY name, month
ORDER BY month
...