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添加组