【发布时间】:2010-07-22 15:20:30
【问题描述】:
问题是:
两张表(t1、t2)
表t1:
SELLER | NON_SELLER
A B
A C
A D
B A
B C
B D
C A
C B
C D
D A
D B
D C
表t2:
SELLER | COUPON | BAL
A 9 100
B 9 200
C 9 300
D 9 400
A 9.5 100
B 9.5 20
A 10 80
使用SELECT 语句得到这个结果:
SELLER| COUPON | SUM(BAL)
A 9 900
B 9 800
C 9 700
D 9 600
A 9.5 20
B 9.5 100
C 9.5 120
D 9.5 120
A 10 0 # !!!
B 10 80
C 10 80
D 10 80
对于卖家 A,SUM(BAL) 表示 sum( B.BAL,C.BAL,D.BAL),对于 B,SUM(BAL)=SUM(A.BAL,C.BAL,D.BAL)...
请找到性能好的方法,不要使用临时表。
我的解决方案:
运行此查询将得到结果,但没有行 "A 10 0":
select t1.seller, t2.coupon, sum(bal)
from t1, t2
where t1.non_seller = t2.seller
group by t1.seller, t2.coupon
order by t2.coupon
请帮忙~~~~~~
【问题讨论】:
-
左连接无效,请注意数据
-
你还有一张附有优惠券列表的桌子吗?您需要查询的效率如何?您总是可以尝试使用 SUM 进行外部连接(CASE WHEN t2.Seller = t1.NonSeller THEN t2.Bal ELSE 0 END),但这并不理想
-
@Jammy Lee:我重新格式化了你的问题。请查看编辑后的版本并阅读Markdown Editing Help 了解更多信息。
-
能否提供“SUM(CASE WHEN t2.Seller = t1.NonSeller THEN t2.Bal ELSE 0 END)”的完整sql?
-
@Peter Lang 谢谢,新外观好多了