基于两张表计算同category_id下金额总和的SQL查询需求
解决方案:关联表并按分组求和去重
我来帮你搞定这个统计需求!你需要关联两张表,只保留在表TWO中存在的product_id,然后按cat_id分组(每个name在分组里只显示一次),同时计算对应分组的amount总和对吧?
正确的SQL查询语句
结合你实际的库表结构,对应的查询语句应该是这样的:
SELECT cat.cat_id, cat.name, SUM(cat_p.amount) AS total_amount FROM ps_product_brand AS cat INNER JOIN ps_product_custom_statistics_weekly AS cat_p ON cat_p.id_product = cat.id_product WHERE cat_p.type LIKE '%all%' AND cat_p.rank <= 16 GROUP BY cat.cat_id, cat.name ORDER BY cat.cat_id ASC;
语句细节解释
- INNER JOIN:确保只统计两张表中都存在的
product_id,完美匹配你“统计表ONE中存在于表TWO的product_id”的要求。 - GROUP BY cat.cat_id, cat.name:按照
cat_id和name分组,从你的示例数据能看出同一个cat_id对应的name是唯一的,这样就能保证每个分组里name只显示一次。 - SUM(cat_p.amount):对每个分组下的所有
amount值求和,直接得到该分类的总金额。 - WHERE条件:保留了你原来需求中的过滤规则,只统计
type包含"all"且rank不超过16的记录。
预期输出结果
执行这条语句后,你会得到和期望完全一致的结果:
+---------+--------+--------------+ | cat_id | name | total_amount | +---------+--------+--------------+ | 1 | w | 210 | | 2 | y | 90 | | 3 | t | 30 | +---------+--------+--------------+
内容的提问来源于stack exchange,提问作者Ylama
相关产品推荐
相关产品推荐

