У меня есть запрос в MySQL следующим образом (имена таблиц изменены):
SELECT
t1.name,
t2.type,
if(data1 = "6", sum(coalesce(data2, 0) * coalesce(data3, 1)) as more_data
FROM table_main tm
JOIN table1 t1 ON tm.t1_id = t1.id
JOIN table2 t2 ON tm.t2_id = t2.id
WHERE day = '2018-01-01'
GROUP BY t1.name, t2.type
ORDER BY more_data DESC
Этот запрос возвращает около 400 результатов, но по какой-то причине каждый раз, когда я пытаюсь подсчитать() что-либо, он сохраняет возвращаемые случайные данные, а не 1 запись, дающую общее количество записей, заданных этим запросом, теперь я пытался избавиться от большинства запроса и только оставляя "if" -statement в качестве выбора, также дает требуемые результаты, но, тем не менее, он не позволит мне использовать это значение в методе count(), есть ли способ подсчета записей из этого запроса без получения случайных данных>
Ваша условная агрегация вывернута наизнанку... Вместо этого используйте выражение case
внутри sum()
.
SELECT
t1.name,
t2.type,
sum(case when data1 = "6" then coalesce(data2, 0) * coalesce(data3, 1) else 0 end) as more_data
FROM table_main tm
JOIN table1 t1 ON tm.t1_id = t1.id
JOIN table2 t2 ON tm.t2_id = t2.id
WHERE day = '2018-01-01'
GROUP BY t1.name, t2.type
ORDER BY more_data DESC
sum(case when data1 = "6" then coalesce(data2, 0) * coalesce(data3, 1) else 0 end)