Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подсчёт в одном поле двух сумм / 8 сообщений из 8, страница 1 из 1
06.07.2020, 10:19
    #39976580
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт в одном поле двух сумм
Добрый день Товарищи!

В программе зачастую бывают ситуации где для какой-то сущности есть набор данных со свойством ДА / НЕТ.
И соответственно когда запрашиваю статистику по сущности, то возникает такой запрос:
Код: sql
1.
2.
SELECT   aa.entityID, SUM(IF(aa.flag=0,1,0)) cnt0, SUM(IF(aa.flag=1,1,0)) cnt1
GROUP BY aa.entityID



А есть ли какие-то принципиальные минусы вариант с подсчётом в одном поле
Код: sql
1.
2.
SELECT   aa.entityID, SUM(IF(aa.flag=0,1,0.000000001)) cntAll
GROUP BY aa.entityID



Ну и последующим выделением умножением и INT'ом? Предполагая что множитель покрывает максимально возможное количество подсчитываемых элементов. Не может ли возникнуть ошибки из-за может какой-то точности у MySQL с накоплением при суммах некоей дельты, или может по производительности это проблемный вариант?
...
Рейтинг: 0 / 0
06.07.2020, 10:28
    #39976584
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт в одном поле двух сумм
kormot
Не может ли возникнуть ошибки из-за может какой-то точности у MySQL с накоплением при суммах некоей дельты, или может по производительности это проблемный вариант?

Может. Или на sql'е или на клиенте.
kormot
А есть ли какие-то принципиальные минусы вариант с подсчётом в одном поле

Но зачем? Полей жалко?

зы.
SELECT aa.entityID, SUM(IF(aa.flag=0,1,0.000000001)) cntAll
У нас победитель в номинации "Костыль месяца"! Примите поздравления!
...
Рейтинг: 0 / 0
06.07.2020, 10:35
    #39976589
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт в одном поле двух сумм
crutchmaster
У нас победитель в номинации "Костыль месяца"! Примите поздравления!

Отлично! Ещё бы призовые выдали, можно было б и дальше костылить не покладая рук :)
...
Рейтинг: 0 / 0
06.07.2020, 10:44
    #39976595
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт в одном поле двух сумм
kormot,

Можно замутить постоянную рубрику с донатом и призовыми. Автор самого адского костыля 1 числа забирает все донаты с пожеланиями.
...
Рейтинг: 0 / 0
06.07.2020, 11:50
    #39976616
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт в одном поле двух сумм
kormot
Код: sql
1.
SUM(IF(aa.flag=0,1,0.000000001))

Лучше в целых числах, чтобы не было потери точности:
Код: sql
1.
SUM(IF(aa.flag=0,100000000,1))
...
Рейтинг: 0 / 0
06.07.2020, 12:08
    #39976623
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт в одном поле двух сумм
kormot
И соответственно когда запрашиваю статистику по сущности, то возникает такой запрос:
Код: sql
1.
SELECT   aa.entityID, SUM(IF(aa.flag=0,1,0)) cnt0, SUM(IF(aa.flag=1,1,0)) cnt1


Ну и зачем тебе это масло масляное? в MySQL можно избавиться от лишних проверок, написав просто
Код: sql
1.
SELECT   aa.entityID, SUM(aa.flag=0) cnt0, SUM(aa.flag=1) cnt1


А если aa.flag не имеет иных, кроме 0 и 1, значений, так и вовсе
Код: sql
1.
2.
3.
SELECT   aa.entityID, SUM(aa.flag=0) cnt0, SUM(aa.flag) cnt1
-- или 
SELECT   aa.entityID, COUNT(aa.flag)-SUM(aa.flag) cnt0, SUM(aa.flag) cnt1



kormot
есть ли какие-то принципиальные минусы вариант с подсчётом в одном поле

Если не считать возможных потери точности, наложения значений, оверхеда от работы с вещественными, а также затрат на парсинг на клиенте - наверное, нет.
...
Рейтинг: 0 / 0
06.07.2020, 12:09
    #39976624
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт в одном поле двух сумм
del
...
Рейтинг: 0 / 0
06.07.2020, 12:58
    #39976645
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт в одном поле двух сумм
Спасибо Товарищи!

Даже, как правильно заметил crutchmaster - в полном костыле, можно извлечь исключительную пользу. :)

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


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