表A
字段ID,Name
表B
字段ID,AID,intergral,state
A表是用户表,B表是积分表
字段state表示加或减 0代表减 1代表加 intergral代表积分
我要查询每个用户有多少积分,显示出Name和intergral
我自己写了好久,只能实现查询有加过积分和减过积分的用户的积分而已。这样我都用了很多代码。
有没有SQL高手帮我一下啊,我对SQL查询了解不是很深。对SQL性能方便了解也不是很好!
在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;
这样应该可以达到你的效果,但是应该还可以优化,你自己琢磨琢磨。
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