我在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'语句作为选择也给出了所需的结果,但是它仍然不会让我在count()方法中使用那个值,有什么方法我可以数来自此查询的记录,无需获取随机数据>
答案 0 :(得分: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