SQL make COUNT () возвращает общее количество строк в запросе

0

У меня есть запрос в 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(), есть ли способ подсчета записей из этого запроса без получения случайных данных>

  • 0
    sum(case when data1 = "6" then coalesce(data2, 0) * coalesce(data3, 1) else 0 end)
Теги:
count

1 ответ

0

Ваша условная агрегация вывернута наизнанку... Вместо этого используйте выражение 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 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню