powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как посчитать проценты по группе используя "over"?
3 сообщений из 3, страница 1 из 1
Как посчитать проценты по группе используя "over"?
    #39225809
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предположим мы продаем машины, и хотим понять сколько процентов машин продано по каждому бренду. Как это сделать в PostgreSQL используя `over`?

Таблица:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    car_id | brand | sold
    ----------------------
    1      | BMW   | true
    2      | BMW   | false
    3      | Mazda | true
    4      | Mazda | false
    5      | Mazda | true

Результат который нужно получить:

Код: plaintext
1.
2.
3.
4.
    brand | sold
    ------------
    BMW   | 50%
    Mazda | 66%

П.С.

Эту задачу можно решить как показано ниже, но мне хотелось бы знать как решить ее используя `over`.

Код: plaintext
1.
2.
    SELECT brand, SUM(CASE WHEN sold = 'true' THEN 1 ELSE 0 END)/COUNT(*) AS Sold
    FROM thedata
    GROUP BY brand
...
Рейтинг: 0 / 0
Как посчитать проценты по группе используя "over"?
    #39225851
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
private,

а зачем тут OVER? думаю вам надо подсчитать сколко продано, сколко всего и от этих цифер высчитывать процент.
...
Рейтинг: 0 / 0
Как посчитать проценты по группе используя "over"?
    #39227917
grgdvo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
private,

может так
SELECT brand, AVG(CASE WHEN sold = 'true' THEN 1 ELSE 0 END) OVER (PARTITION BY brand) AS Sold
FROM thedata
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как посчитать проценты по группе используя "over"?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]