SQL查询需求:基于唯一ID匹配品牌与配送日期汇总数量
解决你的SQL汇总需求
没问题,我来帮你搞定这个查询!核心思路是先定位到指定唯一ID对应的品牌和配送日期,再以此为条件汇总所有匹配项的things字段总和,下面给你几种实用的实现方式:
方式一:子查询直接筛选
这种写法直观易懂,适合快速上手:
SELECT brand, delivery_date, SUM(things) AS total_things FROM your_table_name -- 替换成你的实际表名 WHERE brand = (SELECT brand FROM your_table_name WHERE unique_id = '你的唯一ID值') AND delivery_date = (SELECT delivery_date FROM your_table_name WHERE unique_id = '你的唯一ID值') GROUP BY brand, delivery_date;
它会先通过两个子查询拿到目标ID对应的品牌和日期,再筛选出所有符合这两个条件的记录,最后分组计算总和。
方式二:自连接查询(性能更优)
如果你的表数据量较大,自连接的方式通常比子查询更高效:
SELECT t1.brand, t1.delivery_date, SUM(t2.things) AS total_things FROM your_table_name t1 JOIN your_table_name t2 ON t1.brand = t2.brand AND t1.delivery_date = t2.delivery_date WHERE t1.unique_id = '你的唯一ID值' GROUP BY t1.brand, t1.delivery_date;
这里我们将表自连接,用t1定位到目标ID的品牌和日期,再关联t2中所有匹配的记录进行求和。
方式三:CTE(公共表表达式,可读性更强)
如果追求代码的可读性和可维护性,CTE是不错的选择:
WITH target_info AS ( -- 先获取目标ID对应的品牌和配送日期 SELECT brand, delivery_date FROM your_table_name WHERE unique_id = '你的唯一ID值' ) SELECT ti.brand, ti.delivery_date, SUM(t.things) AS total_things FROM target_info ti JOIN your_table_name t ON ti.brand = t.brand AND ti.delivery_date = t.delivery_date GROUP BY ti.brand, ti.delivery_date;
CTE把获取目标信息的逻辑单独抽出来,让整个查询的逻辑更清晰。
举个实际例子
假设你的表名叫product_shipments,要查询唯一ID为SONY_20180328_001的相关汇总,代码就变成:
WITH target_info AS ( SELECT brand, delivery_date FROM product_shipments WHERE unique_id = 'SONY_20180328_001' ) SELECT ti.brand, ti.delivery_date, SUM(t.things) AS total_things FROM target_info ti JOIN product_shipments t ON ti.brand = t.brand AND ti.delivery_date = t.delivery_date GROUP BY ti.brand, ti.delivery_date;
执行后就会返回该品牌(比如Sony)和配送日期(2018-03-28)对应的所有项目的things总和。
内容的提问来源于stack exchange,提问作者user9446405
相关产品推荐
相关产品推荐

