sql - 使用 GROUP BY 函数在 INNER JOINING 中执行 Sum 不工作 Postgresql
问题描述
任何人都可以解释为什么即使我已经使用了 sum 和 group by 子句,我仍然得到一个分隔的 2 个相同的列名?
这是我在 postgres 中的查询:
SELECT tbl_boxes.box_name AS "BOX NAME",
tbl_stores.store_name AS "STORE NAME",
tbl_sku.sap_name AS "SKU NAME",
SUM(tbl_bad_orders_product.quantity_pcs) AS "QUANTITY PER PIECE",
SUM(tbl_bad_orders_product.price_per_piece) AS "PRICE PER PIECE",
SUM(tbl_bad_orders_product.quantity_cs) AS "QUANTITY PER CASE",
SUM(tbl_bad_orders_product.price_per_case) AS "PRICE PER CASE",
tbl_bad_orders_product.reason AS "REASON",
SUM(tbl_bad_orders_product.total_amount) AS "TOTAL AMOUNT",
tbl_bad_orders_product.date_created AS "DATE CREATED",
tbl_bad_orders_product.date_updated AS "DATE UPDATED",
tbl_bad_orders_product.date_sync AS "DATE SYNCED"
FROM tbl_bad_orders_product
INNER JOIN tbl_users ON tbl_bad_orders_product.tbluserid = tbl_users.tbluserid
INNER JOIN tbl_boxes ON tbl_bad_orders_product.tblboxid = tbl_boxes.tblboxesid
INNER JOIN tbl_stores ON tbl_bad_orders_product.tblstoreid = tbl_stores.tblstoreid
INNER JOIN tbl_sku ON tbl_bad_orders_product.tblskuid = tbl_sku.tblskuid
WHERE tbl_bad_orders_product.date_sync::date >= '2019-02-19'
AND tbl_bad_orders_product.date_sync::date <= '2019-02-19'
GROUP BY tbl_boxes.box_name, tbl_stores.store_name, tbl_sku.sap_name, tbl_bad_orders_product.quantity_pcs,
tbl_bad_orders_product.price_per_piece, tbl_bad_orders_product.quantity_cs,
tbl_bad_orders_product.price_per_case, tbl_bad_orders_product.reason, tbl_bad_orders_product.total_amount,
tbl_bad_orders_product.date_created, tbl_bad_orders_product.date_updated, tbl_bad_orders_product.date_sync
ORDER BY tbl_boxes.box_name ASC
但我得到这个输出:
请帮助我如何解决它。
解决方案
本质上,您在 tbl_bad_orders (quantity_pcs、price_per_piece、quantity_cs、price_per_case、total_amount) 中包含相同的聚合列,SELECT
该子句几乎不需要聚合 ,因为您运行聚合函数,按其GROUP BY
值SUM
分组。
只需从子句中删除SUM
聚合中使用的这些数字字段。GROUP BY
此外,考虑表别名以提高可读性和可维护性。SELECT
还考虑对结果集左侧的分组列和结果集右侧的聚合列重新排序。最后,您的WHERE
情况可能是多余的。
SELECT b.box_name AS "BOX NAME",
s.store_name AS "STORE NAME",
sku.sap_name AS "SKU NAME",
bad.reason AS "REASON",
bad.date_created AS "DATE CREATED",
bad.date_updated AS "DATE UPDATED",
bad.date_sync AS "DATE SYNCED",
SUM(bad.quantity_pcs) AS "QUANTITY PER PIECE",
SUM(bad.price_per_piece) AS "PRICE PER PIECE",
SUM(bad.quantity_cs) AS "QUANTITY PER CASE",
SUM(bad.price_per_case) AS "PRICE PER CASE",
SUM(bad.total_amount) AS "TOTAL AMOUNT"
FROM tbl_bad_orders_product AS bad
INNER JOIN tbl_users AS u ON bad.tbluserid = u.tbluserid
INNER JOIN tbl_boxes AS b ON bad.tblboxid = b.tblboxesid
INNER JOIN tbl_stores AS s ON bad.tblstoreid = s.tblstoreid
INNER JOIN tbl_sku AS sku ON bad.tblskuid = sku.tblskuid
WHERE bad.date_sync::date >= '2019-02-19'
AND bad.date_sync::date <= '2019-02-19'
GROUP BY b.box_name,
s.store_name,
sku.sap_name,
bad.reason,
bad.date_created,
bad.date_updated,
bad.date_sync
ORDER BY b.box_name ASC
推荐阅读
- variables - 默认情况下局部变量是否可训练?
- python - Django 1.11.20 获取每 ISO 周和年的行数
- rx-swift - 具有转换的 BehaviorSubject
- android - Android Kotlin - 捕获的异常仍然会使程序崩溃
- html - 让按钮只在点击一定次数后才做某事?
- javascript - 将 Props 绑定到状态 ReactJS
- c++ - 我想要 grpc 版本 1.14.1 的 protobuff
- python - 如何将字符串格式作为变量传递给 f 字符串
- android - 在不解析 json 数据的情况下,以任何方式存储 JSONArray
- typescript - 键入断言大写接口以降低