powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проблема подсчета кол-ва созданных и измененных (помощь в скрипте)
4 сообщений из 4, страница 1 из 1
Проблема подсчета кол-ва созданных и измененных (помощь в скрипте)
    #40077913
Tayler_Divers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Есть таблица из 5 полей
Trademark - торговая марка
Product - продукт данной марки
Creation - дата создания
Change - дата изменения
User - пользователь, изменивший запись (может принимать значение User1, User2 и User3)

Creation для каждой строки продукта одинакова

Необходимо для каждого Trademark рассчитать:
- кол-во продуктов, созданных с 2020 года
- кол-во продуктов, созданных в 2019 году
- кол-во продуктов, измененных с 2020 года (может не совпадать с предыдущим пунктом, т.к. некоторые созданы до 2020 года)
- кол-во продуктов, измененных пользователем User1 с 2020 года
- кол-во продуктов, изменненных User2 c 2020 года

Желательно выполнить одним запросом

Пытался использовать Count(distinct), но проблема в том, что условие для кол-ва созданных и измененных действует для разных столбцов, а оконные функции возвращают тоже по условию основного селекта.
Есть ли возможность прописать условия отбора внутри самой оконной функции или Count?
...
Рейтинг: 0 / 0
Проблема подсчета кол-ва созданных и измененных (помощь в скрипте)
    #40077920
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tayler_Divers
Есть ли возможность прописать условия отбора внутри самой оконной функции или Count?

Да запросто. Только надо использовать SUM.
Код: sql
1.
SELECT SUM(любое условие) ...


В MySQL TRUE есть алиас единицы, а FALSE - алиас нуля. Так что SUM() просто подсчитает количество записей, для которых условие истинно.

Получится типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT SUM(YEAR(created) = 2020),
       SUM(YEAR(created) = 2019),
       SUM(YEAR(updated) >= 2020),
       SUM(YEAR(updated) >= 2020 AND user = 'User1'),
       SUM(YEAR(updated) >= 2020 AND user = 'User2')
FROM table
WHERE YEAR(created) >= 2019


Условие во WHERE позволяет не обрабатывать заведомо неподходящие записи.
...
Рейтинг: 0 / 0
Проблема подсчета кол-ва созданных и измененных (помощь в скрипте)
    #40077922
Tayler_Divers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
А как учесть уникальность?
например, есть 3 строки для одного продукта
Printer 10/03/2020 11/04/2020 User1
Printer 10/03/2020 15/04/2020 User2
Printer 10/03/2020 20/04/2020 User2

Sum по идее будет выводить значение 3 по дате создания,поскольку каждая строка будет попадать под условие "создано после 2020 года"
А как прописать грамотно Count с условием в таком случае?
...
Рейтинг: 0 / 0
Проблема подсчета кол-ва созданных и измененных (помощь в скрипте)
    #40077944
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом случае нужно не просто условие, а вывод поля/выражения, которое определяет уникальность.

Т.е. не
Код: sql
1.
SUM(YEAR(updated) >= 2020)

а
Код: sql
1.
COUNT(DISTINCT CASE WHEN YEAR(updated) >= 2020 THEN product END)



CASE вернёт или product (если условие выполняется) или NULL. COUNT() проигнорирует NULL и подсчитает количество уникальных product.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проблема подсчета кол-ва созданных и измененных (помощь в скрипте)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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