我的 SQL 数据透视查询返回错误,但似乎没有错误

My SQL pivot query is returning an error though there doesnt seem to be one

我的 SQL 查询是:

SELECT * FROM 
(SELECT * FROM transactions) AS T1
PIVOT(SUM(amount) FOR month IN([March], [April], [May])) AS pvt

我的Table如下:

id  payee       amount  month    
1   Tom         90      March
3   Tom         66      April
4   Tom         89      May
10  Jasmine     125     April
11  Nancy       151     March
12  Jasmine     175     April
13  Nancy       152     April

我想要的输出是:

payee       March  April   May
Tom         90     66      89
Jasmine     --     300     --
Nancy       151    152     --

我 运行 在我的网站的 phpMyAdmin 中进行此查询,出现的错误如下:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PIVOT(SUM(amount) FOR month IN([March], [April], [May])) AS pvt

MySQL中没有PIVOT,没有CROSSTAB,没有类似的语法。您必须手动构建 pivot tables。一种常见的技术称为 条件聚合, 可以这样使用:

SELECT `payee`
    , SUM(CASE WHEN `month` = 'March' THEN `amount` END) AS `March`
    , SUM(CASE WHEN `month` = 'April' THEN `amount` END) AS `April`
    , SUM(CASE WHEN `month` = 'May' THEN `amount` END) AS `May` 
  FROM `transactions`
  GROUP BY `payee`;

GROUP BY很关键,因为它限制了聚合函数SUM的作用域。它在计算之前应用,它表示每个 payee 的值只能有一个输出记录。然后我可以写 SUM(amount) 来计算 payee (普通聚合) 的所有金额的总和,但我插入另一个条件 SUM(CASE WHEN ... THEN ... END) 和我做 条件聚合。

在不使用 GROUP BY 的情况下使用 SUM 将计算整个 table.

的总和