Size: a a a

2020 November 24

G

Grigorij in MySQL
Ну, а без группировки запусти запрос
источник

G

Grigorij in MySQL
count считает всё, что не NULL
источник

AZ

Anthony Zubkov in MySQL
Доброго времени, два дня ломаю голову, уже просто закончились варианты чего гуглить вообще
Хотя бы направление понять хочется.

В таблице t1 поля - t1.id, t1.e_id, t1.size, t1.p_id
В таблице t2 поля - t2.id, t2.e_id
Пытаюсь сделать выборку по типу:
SELECT t1.*, SUM(t1.size) as t1.size FROM t1 LEFT JOIN t2 ON t1.e_id = t2.e_id GROUP BY t1.p_id
Если в таблице t2 есть несколько совпадений по условию t1.e_id = t2.e_id у меня получается выборка с дубликатами в таблице t1 то бишь декартово объединение
Я по сути пытаюсь посчитать сумму размеров, но т.к. значения дублируются сумма получается не та
DISTINCT не канает т.к. поля итак уникальные
Все виды и варианты join перепробовал и перечитал, придя к выводу что объединение есть объединение
Решил вопрос через объединение запросов - супер долго
Через суммирование в цикле - как то странно это выглядит

Может сталкивался кто с чем похожим?
источник

AZ

Anthony Zubkov in MySQL
Поспешил, ошибка была в том что я запихнул подзапрос в условие WHERE t1.e_id IN (SELECT...)
А подзапрос надо было поместит в JOIN
источник

IZ

Ilia Zviagin in MySQL
Dmitrii
SELECT i.*, COUNT(elr2.ID) as TOTAL_SENDING, COUNT(elr.ID) as SUCCESS_SEND
FROM EMAIL_LISTS i
        LEFT JOIN EMAIL_LIST_RECIPIENTS elr2 ON elr2.EMAIL_LIST_ID = i.ID
        LEFT JOIN EMAIL_LIST_RECIPIENTS elr ON elr.EMAIL_LIST_ID = i.ID AND elr.STATUS IN (2,4,5)
WHERE i.TYPE = 5
GROUP BY i.ID

Коллеги, что не так с запросом? Я хочу чтоб мне в TOTAL_SENDING и SUCCESS_SEND выдал разные количества по статусам, но SUCCESS_SEND становится равным TOTAL_SENDING, если есть хоть одна соответствующая запись
надо начать с того, что GROUP BY неправильный.

i.*,  нельзя писать, если всех этих полей нет в GROUP BY
источник

IZ

Ilia Zviagin in MySQL
Anthony Zubkov
Доброго времени, два дня ломаю голову, уже просто закончились варианты чего гуглить вообще
Хотя бы направление понять хочется.

В таблице t1 поля - t1.id, t1.e_id, t1.size, t1.p_id
В таблице t2 поля - t2.id, t2.e_id
Пытаюсь сделать выборку по типу:
SELECT t1.*, SUM(t1.size) as t1.size FROM t1 LEFT JOIN t2 ON t1.e_id = t2.e_id GROUP BY t1.p_id
Если в таблице t2 есть несколько совпадений по условию t1.e_id = t2.e_id у меня получается выборка с дубликатами в таблице t1 то бишь декартово объединение
Я по сути пытаюсь посчитать сумму размеров, но т.к. значения дублируются сумма получается не та
DISTINCT не канает т.к. поля итак уникальные
Все виды и варианты join перепробовал и перечитал, придя к выводу что объединение есть объединение
Решил вопрос через объединение запросов - супер долго
Через суммирование в цикле - как то странно это выглядит

Может сталкивался кто с чем похожим?
У тебя то же самое — неправильный GROUP BY
источник

IZ

Ilia Zviagin in MySQL
Anthony Zubkov
Поспешил, ошибка была в том что я запихнул подзапрос в условие WHERE t1.e_id IN (SELECT...)
А подзапрос надо было поместит в JOIN
Подзапрос в JOIN — это хорошо, это от души прям.
источник

AZ

Anthony Zubkov in MySQL
Ilia Zviagin
У тебя то же самое — неправильный GROUP BY
GROUP BY таков так как мне сумма размеров именно по  t1.p_id нужна а не по t1.e_id
источник

AZ

Anthony Zubkov in MySQL
Ilia Zviagin
Подзапрос в JOIN — это хорошо, это от души прям.
быстрее чем подзапрос запиханный в IN в моем случае в 2800 раз
источник

D

Dmitrii in MySQL
Ilia Zviagin
надо начать с того, что GROUP BY неправильный.

i.*,  нельзя писать, если всех этих полей нет в GROUP BY
ну я это отключением настройки only_full_group_by поправил. Но это проблему не решает,
SELECT i.ID, COUNT(elr2.ID) as TOTAL_SENDING, COUNT(elr.ID) as SUCCESS_SEND
FROM EMAIL_LISTS i
        LEFT JOIN EMAIL_LIST_RECIPIENTS elr2 ON elr2.EMAIL_LIST_ID = i.ID
        LEFT JOIN EMAIL_LIST_RECIPIENTS elr ON elr.EMAIL_LIST_ID = i.ID AND elr.STATUS IN (2,4,5)
WHERE i.TYPE = 5
GROUP BY i.ID

тут тоже самое
источник

S

Syntax Highlight Bot in MySQL
Dmitrii
ну я это отключением настройки only_full_group_by поправил. Но это проблему не решает,
SELECT i.ID, COUNT(elr2.ID) as TOTAL_SENDING, COUNT(elr.ID) as SUCCESS_SEND
FROM EMAIL_LISTS i
        LEFT JOIN EMAIL_LIST_RECIPIENTS elr2 ON elr2.EMAIL_LIST_ID = i.ID
        LEFT JOIN EMAIL_LIST_RECIPIENTS elr ON elr.EMAIL_LIST_ID = i.ID AND elr.STATUS IN (2,4,5)
WHERE i.TYPE = 5
GROUP BY i.ID

тут тоже самое
источник

IZ

Ilia Zviagin in MySQL
Dmitrii
ну я это отключением настройки only_full_group_by поправил. Но это проблему не решает,
SELECT i.ID, COUNT(elr2.ID) as TOTAL_SENDING, COUNT(elr.ID) as SUCCESS_SEND
FROM EMAIL_LISTS i
        LEFT JOIN EMAIL_LIST_RECIPIENTS elr2 ON elr2.EMAIL_LIST_ID = i.ID
        LEFT JOIN EMAIL_LIST_RECIPIENTS elr ON elr.EMAIL_LIST_ID = i.ID AND elr.STATUS IN (2,4,5)
WHERE i.TYPE = 5
GROUP BY i.ID

тут тоже самое
Я хочу чтоб мне в TOTAL_SENDING и SUCCESS_SEND выдал разные количества по статусам, но SUCCESS_SEND становится равным TOTAL_SENDING, если есть хоть одна соответствующая запись

я вот тут нифига не понял.
источник

D

Dmitrii in MySQL
Ilia Zviagin
Я хочу чтоб мне в TOTAL_SENDING и SUCCESS_SEND выдал разные количества по статусам, но SUCCESS_SEND становится равным TOTAL_SENDING, если есть хоть одна соответствующая запись

я вот тут нифига не понял.
в EMAIL_LIST_RECIPIENTS есть статус, он бывает 1,2,3,4,5. Мне нужно посчитать общее количество и только те, у которых статус (2,4,5)
источник

IZ

Ilia Zviagin in MySQL
Dmitrii
ну я это отключением настройки only_full_group_by поправил. Но это проблему не решает,
SELECT i.ID, COUNT(elr2.ID) as TOTAL_SENDING, COUNT(elr.ID) as SUCCESS_SEND
FROM EMAIL_LISTS i
        LEFT JOIN EMAIL_LIST_RECIPIENTS elr2 ON elr2.EMAIL_LIST_ID = i.ID
        LEFT JOIN EMAIL_LIST_RECIPIENTS elr ON elr.EMAIL_LIST_ID = i.ID AND elr.STATUS IN (2,4,5)
WHERE i.TYPE = 5
GROUP BY i.ID

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

EMAIL_LISTS i И  EMAIL_LIST_RECIPIENTS elr2
и

EMAIL_LISTS i И   EMAIL_LIST_RECIPIENTS elr
источник

D

Dmitrii in MySQL
Ilia Zviagin
Скажи,
таблицы , записи в них, как друг с другом соотносятся?

EMAIL_LISTS i И  EMAIL_LIST_RECIPIENTS elr2
и

EMAIL_LISTS i И   EMAIL_LIST_RECIPIENTS elr
Да, elr2.EMAIL_LIST_ID = i.ID
источник

IZ

Ilia Zviagin in MySQL
Dmitrii
в EMAIL_LIST_RECIPIENTS есть статус, он бывает 1,2,3,4,5. Мне нужно посчитать общее количество и только те, у которых статус (2,4,5)
У тебя и так есть это условие по статусам. Что тебе ещё надо — я не понимаю.
источник

IZ

Ilia Zviagin in MySQL
Dmitrii
Да, elr2.EMAIL_LIST_ID = i.ID
Что да? Как соотносятся они?
источник

IZ

Ilia Zviagin in MySQL
Dmitrii
Да, elr2.EMAIL_LIST_ID = i.ID
(чуть подправил)
источник

D

Dmitrii in MySQL
Ilia Zviagin
Скажи,
таблицы , записи в них, как друг с другом соотносятся?

EMAIL_LISTS i И  EMAIL_LIST_RECIPIENTS elr2
и

EMAIL_LISTS i И   EMAIL_LIST_RECIPIENTS elr
ну EMAIL_LIST_RECIPIENTS это одна и та же таблица, я им просто разные алиасы пытаюсь назначить, чтоб одна и та же таблица 2 раза приджоинилась - может, кстати, в этом проблема?
источник

D

Dmitrii in MySQL
EMAIL_LISTS.ID это FK для  EMAIL_LIST_RECIPIENTS.EMAIL_LIST_ID
источник