MySQL 1241 错误

标签 mysql pivot mysql-error-1241

我有 2 个独立的查询,它们正在计算给定节日的付款总入/出。 IN/OUT 由 ENUM 值给出(见下文)。 enter image description here enter image description here

如果我独立运行查询,它会根据所选的 payment_type IN 或 OUT 给出正确的 SUM 输出。我的问题是,当我尝试将它们组合在一个查询中以获得 2 个单独的 IN/OUT 列时,如下所示。

enter image description here

我在 MySQL 中有错误“操作数应包含 1 列”。在我做了一些研究之后,我认为子查询是错误的,但我不太确定如何解决它。

在此先感谢您的帮助...

总计

SELECT
    SUM(`payment`.`pmt_amount`) AS `TOTAL IN`
    , `payment`.`pmt_type`
    , `festival`.`id_festival`
FROM
    payment
    INNER JOIN festival
        ON (`payment`.`id_festival` = `festival`.`id_festival`)
WHERE (`payment`.`pmt_type` LIKE '%IN'
    AND `festival`.`id_festival` = 1);

enter image description here

和总计

SELECT
    SUM(`payment`.`pmt_amount`) AS `TOTAL OUT`
    , `payment`.`pmt_type`
    , `festival`.`id_festival`
FROM
    payment
    INNER JOIN festival
        ON (`payment`.`id_festival` = `festival`.`id_festival`)
WHERE (`payment`.`pmt_type` LIKE '%OUT'
    AND `festival`.`id_festival` = 1);

enter image description here

合并

SELECT
  festival.id_festival,
  payment.pmt_amount,
  payment.pmt_type,
  (SELECT
      payment.pmt_type,
      SUM(payment.pmt_amount) AS `TOTAL OUT`
    FROM payment
    WHERE payment.pmt_type LIKE '%OUT'),
  (SELECT
      payment.pmt_type,
      SUM(payment.pmt_amount) AS `TOTAL IN`
    FROM payment
    WHERE payment.pmt_type LIKE '%IN')
FROM payment
  INNER JOIN festival
    ON payment.pmt_amount = festival.id_festival
WHERE festival.id_festival = 1

enter image description here

最佳答案

您可能只想在这里使用条件聚合:

SELECT
    f.id_festival,
    SUM(CASE WHEN p.pmt_type = 'Payment IN'  THEN p.pmt_amount ELSE 0 END) AS `TOTAL IN`,
    SUM(CASE WHEN p.pmt_type = 'Payment OUT' THEN p.pmt_amount ELSE 0 END) AS `TOTAL OUT`
FROM festival f
INNER JOIN payment p
    ON p.id_festival = f.id_festival
WHERE f.id_festival = 1
GROUP BY
    f.id_festival;

请注意,您的查询只关注一个节日,但正确的表达方式是通过 GROUP BY,即使我们只想在输出中保留一个组。

关于MySQL 1241 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49706384/

相关文章:

mysql - InnoDB file_per_table存储释放

c# - 如何从运行时创建的控件中获取值

SQL 转置和连接

javascript - 如何转换 2015年11月18日 12 :00:00 GMT+0530 (Sri Lanka Standard Time) to (yyyy-MM-dd HH-mm-ss) format in javascript

mysql - 如何对该 SQL 进行分组

sql - 具有多个组的 SSRS 矩阵

python - 对数据透视表中的列重新排序

mysql - 错误代码 1241 - 操作数应包含 1 列

mysql - 这个查询有什么问题?我正在尝试创建一个带有一些主 id 的练习小表来进行匹配,但我在这里没有找到错误

mysql - 操作数应包含 1 列错误