一个关于JOIN的SQL语句

问题描述:抓取程序的结果精度不够,导致入库的数据有的正确,有的错误,需要找出错误的数据.

抓取下来的数据有三个值,最高价,最低价和平均值.其中最高价和最低价由网页提供,平均值是自己算出来的,但是平均值被强制转换为了int类型,所以导致了精度的丧失.

思路分析:写SQL语句,进行判断,找出错误的数据.

表内容截图:


--mValue是存储数据的列
--当indiccode2=79246时,mValue存储的是最低价的数据
--indiccode2=79247 --最高价
--indiccode2=79248 --平均值值
--由indiccode,indiccode2, enddate确定唯一的一条记录
--当indiccode,enddate相同时,会查出三条记录,分别是最低价,最高价和平均值.

最终结果:

SELECT 
	A.indiccode AS indiccode,
	A.enddate AS enddate,
	A.avgRight AS avgRight,
	B.mvalue AS avgWrong 
FROM 
(
	SELECT indiccode, enddate,avg(mvalue) AS avgRight 
	FROM Industry_datamid
	WHERE indiccode2=79246 or indiccode2=79247 
	GROUP BY enddate,indiccode
) AS A  
join
(
	SELECT indiccode, enddate,mvalue 
	FROM Industry_datamid 
	WHERE indiccode2=79248 
) AS B 
on
(
	(A.avgRight <> B.mvalue) 
	and (A.indiccode = B.indiccode)
	and A.enddate = B.enddate
)

1.使用查询结果做为临时表,语法是:

(SELECT * FROM ...) AS [表名]
可以对这个临时表进行查询操作

2.使用JOIN语句进行组合表

组合方式大致有这几种:

1)INNER  JOIN

2)OUTER  JOIN(  LEFT  和  RIGHT)

3)FULL  JOIN

4)CROSS  JOIN

具体描述可见sql 2008入门经典 p68 和 点击打开链接 中的内容

3.SQL中使用 <> 代替 !=

留一个小问题:

你知道表A中是如何求出平均值的吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值