我的 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.
的总和
我的 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.