首页 新闻 会员 周边 捐助

SQL查询语句

0
悬赏园豆:20 [已解决问题] 解决于 2010-11-25 09:43

表A   

字段ID,Name

表B

字段ID,AID,intergral,state

 

A表是用户表,B表是积分表

字段state表示加或减  0代表减  1代表加  intergral代表积分

我要查询每个用户有多少积分,显示出Name和intergral

 

我自己写了好久,只能实现查询有加过积分和减过积分的用户的积分而已。这样我都用了很多代码。

 

有没有SQL高手帮我一下啊,我对SQL查询了解不是很深。对SQL性能方便了解也不是很好!

|ī笨笨﹎ヤ的主页 |ī笨笨﹎ヤ | 初学一级 | 园豆:2
提问于:2010-11-24 21:10
< >
分享
最佳答案
0

在mysql上测试通过:

SELECT NM, SUM(NUM) FROM (

SELECT A.NAME AS NM,

(CASE B.STATE WHEN 1 THEN B.INTERGRALWHEN 0 THEN B.INTERGRAL * -1 END) AS NUM

FROM A LEFT JOIN BON A.ID = B.AID

) AS C GROUP BY C.NM;

收获园豆:20
wang_yb | 老鸟四级 |园豆:4891 | 2010-11-24 23:01
答案不正确,不过谢谢你,你的语句让我想起来原来还有case when then end 这些可以用 我很久没有用这些,基本忘记了他们的存在了。 哈哈.. 谢谢 我知道怎么写了
|ī笨笨﹎ヤ | 园豆:2 (初学一级) | 2010-11-25 09:43
汗,居然不对
wang_yb | 园豆:4891 (老鸟四级) | 2010-11-25 09:51
我测试了你的在sqlserver里面是对的。
dinoy | 园豆:160 (初学一级) | 2010-11-30 16:20
其他回答(1)
0

这样应该可以达到你的效果,但是应该还可以优化,你自己琢磨琢磨。

 

select j.Name,j.Jf - h.Jf Jf from
(
select a.Name,sum(b.intergral) Jf from A as a inner join B as b on a.ID=b.AID where b.state='1' group by Name) j,
(
select a.Name,sum(b.intergral) Jf from A as a inner join B as b on a.ID=b.AID where b.state='0' group by Name) h
where j.Name=h.Name
勤劳的渔网工作者 | 园豆:572 (小虾三级) | 2010-11-24 22:46
.... 你这样的写法我早就写过了,只能查出有添加过和减少过积分的人的积分而已。。。。 不过谢谢你的回答
支持(0) 反对(0) |ī笨笨﹎ヤ | 园豆:2 (初学一级) | 2010-11-25 09:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册