【问题标题】:MySQL pivot queryMySQL 数据透视查询
【发布时间】:2013-05-21 10:45:26
【问题描述】:

我曾经有一个查询

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 

我需要的结果应该是这样的

may_target_ecmp、may_actual_ecpm、april_target_ecpm、 april_actual_ecpm、march_target_ecpm、march_actual_ecpm。

4 月 MONTH(ps_month) = 04 和 3 月 MONTH(ps_month) = 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

能否请您帮我弄清楚如何使这个查询达到预期的效果。 提前致谢

附:这个问题从这个问题一路而来——mysql pivoting - how can I fetch data from the same table into different columns?

【问题讨论】:

    标签: mysql pivot-table


    【解决方案1】:

    只需使用聚合函数,例如 MAX 就可以正常工作,但如果您需要获取每个月的总数,如果每个月有多个 ps_target_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_target_ecpm 条目,则 SUM 如果他想要总数。我添加了这个注释,谢谢。
    • 伙计们,非常感谢你们,它就像一个魅力!我只需要添加 GROUP BY dmn_id
    猜你喜欢
    • 2012-12-31
    • 2020-11-03
    • 2017-12-19
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多