【问题标题】:"Invalid use of group function" when insert on duplicate key update插入重复键更新时“无效使用组功能”
【发布时间】:2013-12-09 03:43:15
【问题描述】:

我的查询有问题,我想在它重复时插入和更新,但它却说“组函数的使用无效”。

我已经运行了我唯一的“Select”语句,没有出现“Invalid use of group function”之类的问题。

这是我的完整代码:

INSERT INTO tbl_biir_aktual(cabang_kode, periode_thn, periode_bln, pending_pp_volume, pending_pp_value)
SELECT a.cabang_kode, YEAR(a.tanggal) AS tahun, MONTH(a.tanggal)AS bulan, 
    SUM(a.qty_pending*a.unit_barang)AS tonase_pending, SUM(a.value_pending)AS value_pending 
FROM tbl_order a,
    (SELECT b.cabang_kode, MAX(b.tanggal)tanggal
    FROM tbl_order b
    GROUP BY b.cabang_kode, YEAR(b.tanggal), MONTH(b.tanggal)) AS max_cabang
WHERE max_cabang.cabang_kode = a.cabang_kode AND max_cabang.tanggal = a.tanggal
GROUP BY cabang_kode, YEAR(tanggal), MONTH(tanggal)
ON DUPLICATE KEY
UPDATE pending_pp_volume = SUM(a.qty_pending*a.unit_barang), pending_pp_value = SUM(a.value_pending);

嗯, 嘿,我刚刚找到了这个MySQL ON DUPLICATE KEY UPDATE while inserting a result set from a query

INSERT INTO tbl_biir_aktual(cabang_kode, periode_thn, periode_bln, pending_pp_volume, pending_pp_value)
SELECT a.cabang_kode, YEAR(a.tanggal) AS tahun, MONTH(a.tanggal)AS bulan, 
    @tonase_pending := SUM(a.qty_pending*a.unit_barang)AS tonase_pending, @value_pending := SUM(a.value_pending)AS value_pending 
FROM tbl_order a,
    (SELECT b.cabang_kode, MAX(b.tanggal)tanggal
    FROM tbl_order b
    GROUP BY b.cabang_kode, YEAR(b.tanggal), MONTH(b.tanggal)) AS max_cabang
WHERE max_cabang.cabang_kode = a.cabang_kode AND max_cabang.tanggal = a.tanggal
GROUP BY cabang_kode, YEAR(tanggal), MONTH(tanggal)
ON DUPLICATE KEY
UPDATE pending_pp_volume = @tonase_pending, pending_pp_value = @value_pending;

我已经尝试过了,它已经完成了。 无论如何,Tq Edper 给您的评论....

【问题讨论】:

  • 很高兴您找到了解决方案。是的,变量应该这样做!

标签: mysql insert sql-update


【解决方案1】:

尝试在更新中使用别名:

UPDATE SET pending_pp_volume = tonase_pending, pending_pp_value = value_pending

另外,使用另一个名称作为聚合别名比使用与现有字段名称相同的名称(如 value_pending)更明智。不妨把它改成 TotalValuePending,这样就可以了:

UPDATE SET pending_pp_volume = tonase_pending, pending_pp_value = TotalValuePending

【讨论】:

  • Tq 但我也试过了,它说“'字段列表'中的未知列'tonase_pending'”它解决了组问题但它找不到我的“SUM( a.qty_pending*a.unit_barang)AS tonase_pending"
  • 感谢您的帮助,我已经编辑了我的帖子,现在一切都完成了。你只需要使用“@”我想像这样@tonase_pending
  • @Agata:很高兴您找到了解决方案。 @namehere 是一个变量,在这种情况下,您将聚合函数的结果放在名为 @tonase_pending 的变量中。
猜你喜欢
  • 2014-01-15
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 2021-03-28
  • 2020-05-05
  • 2019-10-28
  • 2016-09-17
相关资源
最近更新 更多