MySQL透视查询
我曾经有一个疑问MySQL透视查询,mysql,pivot-table,Mysql,Pivot Table,我曾经有一个疑问 SELECT ps_target_ecpm, ps_actual_ecpm FROM publisher_stats JOIN domain ON domain.dmn_id = ps_dmn_id LEFT JOIN langue ON langue.lng_id = domain.default_lng_id WHERE MONTH(ps_month) = 05 我需要的结果应该是 五月目标ecmp,五月实际ecpm,四月目标ecpm, 4月实际ecpm,3月目标ecp
SELECT ps_target_ecpm, ps_actual_ecpm
FROM publisher_stats
JOIN domain ON domain.dmn_id = ps_dmn_id
LEFT JOIN langue ON langue.lng_id = domain.default_lng_id
WHERE MONTH(ps_month) = 05
我需要的结果应该是
五月目标ecmp,五月实际ecpm,四月目标ecpm,
4月实际ecpm,3月目标ecpm,3月实际ecpm
四月(月)为04,三月(月)为03
分别
经过一番盘问,我最终提出了一个类似这样的问题
SELECT
(CASE WHEN MONTH(ps_month) = 4 THEN ps_target_ecpm ELSE 0 END) AS april_target_ecpm,
(CASE WHEN MONTH(ps_month) = 4 THEN ps_actual_ecpm ELSE 0 END) AS april_actual_ecpm,
(CASE WHEN MONTH(ps_month) = 3 THEN ps_target_ecpm ELSE 0 END) AS march_target_ecpm,
(CASE WHEN MONTH(ps_month) = 3 THEN ps_actual_ecpm ELSE 0 END) AS march_actual_ecpm
FROM publisher_stats
JOIN domain ON domain.dmn_id = ps_dmn_id
LEFT JOIN langue ON langue.lng_id = domain.default_lng_id
我得到的结果集并不是我所需要的。
示例响应是:
0 0 0.48 0.27
0.48 0.47 0 0
而我需要它在一排
0.48 0.47 0.48 0.27
你能帮我弄清楚如何让这个查询达到它的目的吗。
提前谢谢
另外,这个问题来自于这个问题-只需使用一个聚合函数,例如,
MAX
就可以了,但是如果你需要得到每个月的总数,如果每个月的ps\u target\u ecpm
有多个条目,你可能需要使用SUM
。像这样:
SELECT
MAX(CASE WHEN MONTH(ps_month) = 4 THEN ps_target_ecpm ELSE 0 END) AS april_target_ecpm,
MAX(CASE WHEN MONTH(ps_month) = 4 THEN ps_actual_ecpm ELSE 0 END) AS april_actual_ecpm,
MAX(CASE WHEN MONTH(ps_month) = 3 THEN ps_target_ecpm ELSE 0 END) AS march_target_ecpm,
MAX(CASE WHEN MONTH(ps_month) = 3 THEN ps_actual_ecpm ELSE 0 END) AS march_actual_ecpm
FROM publisher_stats
JOIN domain ON domain.dmn_id = ps_dmn_id
LEFT JOIN langue ON langue.lng_id = domain.default_lng_id
@MarkBannister-根据样本数据,两者都会给出准确的结果,但是如果他想要总数,那么如果每个月都有多个
ps\u target\u ecpm
。我加了这张纸条,谢谢。伙计们,非常感谢你们,它很有魅力!。我只需要按dmn_id添加组