为啥sum后不能在mysql sum wheree后加条件,而另外一个函数可以?

查看: 4129|回复: 5
[Q]一个SQL的问题:请问SUM的字段是否不能作为where中的条件呢?例子如下
论坛徽章:2
SELECT (SELECT MC FROM DB.DJ_SJ WHERE A.JDM=JDM) AS MC,
& && & (SELECT LXDM FROM DB.DJ_SJ WHERE A.JDM=JDM) AS DH ,
& && & A.ZDM,
& && & (SELECT MMC FROM DM.SB_SM WHERE A.ZDM=MDM) AS ZMC,
& && & A.JDM,
& && & SUM(B.JE) AS ZJE,
& && & SUM(B.RE) AS ZRE,
& && & SUM(B.KL) AS ZKL,
& && & A.FSDM,
& && & A.SJLY
&&FROM SB.SB_JZ A,
& && & SB.SB_JMX B
WHERE A.XDM='09'
& &AND SUBSTR(A.ZWBS,1,2)&&'0'
& &AND A.YRQ&=TO_DATE('','YYYY-MM-DD')
& &AND A.BRQ&=TO_DATE('','YYYY-MM-DD')
& &AND A.BRQ&=TO_DATE(' 23:59:59','YYYY-MM-DD HH24:MI:SS')
& &AND A.PZH=B.PZH
& &AND A.ZDM='12'
GROUP BY A.JDM,A.ZDM,A.FSDM,A.SJLY ORDER BY ZJE DESC
SELECT (SELECT MC FROM DB.DJ_SJ WHERE A.JDM=JDM) AS MC,
& && & (SELECT LXDM FROM DB.DJ_SJ WHERE A.JDM=JDM) AS DH ,
& && & A.ZDM,
& && & (SELECT MMC FROM DM.SB_SM WHERE A.ZDM=MDM) AS ZMC,
& && & A.JDM,
& && & SUM(B.JE) AS ZJE,
& && & SUM(B.RE) AS ZRE,
& && & SUM(B.KL) AS ZKL,
& && & A.FSDM,
& && & A.SJLY
&&FROM SB.SB_JZ A,
& && & SB.SB_JMX B
WHERE A.XDM='09'
& &AND SUBSTR(A.ZWBS,1,2)&&'0'
& &AND A.YRQ&=TO_DATE('','YYYY-MM-DD')
& &AND A.BRQ&=TO_DATE('','YYYY-MM-DD')
& &AND A.BRQ&=TO_DATE(' 23:59:59','YYYY-MM-DD HH24:MI:SS')
& &AND A.PZH=B.PZH
& &AND A.ZDM='12'
& &AND ZJE&=0
& &AND ZRE&=0
& &AND ZKL&=0
GROUP BY A.JDM,A.ZDM,A.FSDM,A.SJLY ORDER BY ZJE DESC
就开始乱报错误了非说
ERROR at line 24:
ORA-00904: &ZKL&: invalid identifier
招聘 : 论坛徽章:57
论坛徽章:2
请明示,谢谢
招聘 : 论坛徽章:57
SELECT (SELECT MC FROM DB.DJ_SJ WHERE A.JDM=JDM) AS MC,
(SELECT LXDM FROM DB.DJ_SJ WHERE A.JDM=JDM) AS DH ,
(SELECT MMC FROM DM.SB_SM WHERE A.ZDM=MDM) AS ZMC,
SUM(B.JE) AS ZJE,
SUM(B.RE) AS ZRE,
SUM(B.KL) AS ZKL,
FROM SB.SB_JZ A,
SB.SB_JMX B
WHERE A.XDM='09'
AND SUBSTR(A.ZWBS,1,2)&&'0'
AND A.YRQ&=TO_DATE('','YYYY-MM-DD')
AND A.BRQ&=TO_DATE('','YYYY-MM-DD')
AND A.BRQ&=TO_DATE(' 23:59:59','YYYY-MM-DD HH24:MI:SS')
AND A.PZH=B.PZH
AND A.ZDM='12'
GROUP BY A.JDM,A.ZDM,A.FSDM,A.SJLY ORDER BY ZJE DESC
having SUM(B.JE)&=0 and SUM(B.RE)&=0 and SUM(B.KL)&=0
同上就可以了。
同上就可以了
论坛徽章:2
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号你的位置: >
> SQL从头学(二):sql的汇总函数COUNT SUM AVG MAX MIN等
记得有次去一个公司面试,当时他们老板不在,一个女的估计是他们的文员,简单问了我的情况后,拿出一份卷子来给我做,上面关于sql的内容相当多,当时考的是一塌糊涂啊,现在得赶紧学习学习咯!
函数COUNT SUM AVG MAX MIN 是由ANSI 标准所制定的。大多数的SQL 解释器都对汇总函数进行了扩充。
此函数将返回满足WHERE 条件子句中记录的个数,例如你想知道都有哪一个球员的击球数小于350, 可以这样做:
SELECT COUNT(*) FROM TEAMSTATS WHERE HITS/AB &.35;
为了使这段代码更易读可以使用别名
SELECT COUNT(*) NUM_BELOW_350 FROM TEAMSTATS WHERE HITS/AB&.35;
如果我们用列名来替换掉括号中的星号时会结果与原来有什么不同呢?试一下:
SELECT COUNT(NAME) NUM_BELOW_350 FROM TEAMSTATS WHERE HITS/AB&.35;
结果是一样的,都是返回满足条件的记录的个数。
因为你所选择的NAME 列与WHERE 子句并不相关,如果你在使用count时无WHERE 子句,那么它将会返回表中的所有记录的个数。
SUM 就如同它的本意一样,它返回某一列的所有数值的和。
SELECT SUM(SINGLES) TOTAL_SINGLES FROM TEAMSTATS;
此语句很容易理解:
为取TEAMSTATS表中的SINGLES列 的和 在新窗口中以TOTAL_SINGLES为列名显示。
如果想得到多个列的和,可按如下所做:
SELECT SUM(SINGLES) TOTAL_SINGLES, SUM(DOUBLES) TOTAL_DOUBLES, SUM(TRIPLES) TOTAL_TRIPLES, SUM(HR) TOTAL_HR FROM TEAMSTATS;
同时取4个列的合并分别重命名。
类似地,如果想找一下所有的点数在300(包括300)以上的的队员,则语句如下:
SELECT SUM(SINGLES) TOTAL_SINGLES, SUM(DOUBLES) TOTAL_DOUBLES,SUM(TRIPLES) TOTAL_TRIPLES, SUM(HR) TOTAL_HR FROM TEAMSTATS WHERE HITS/AB &=.300;
想估计一下一个球队的平均中球率:
SELECT SUM(HITS)/SUM(AB) TEAM_AVERAGE FROM TEAMSTATS;
SUM 只能处理数字;
如果它的处理目标不是数字,则会收到错误提示。
可以返回某一列的平均值。如果你想知道漏球的平均数请看下例:
SELECT AVG(SO) AVE_STRIKE_OUTS FROM TEAMSTATS;
下边的例子反映了SUM 与AVG 的不同之处:
SELECT AVG(HITS/AB) TEAM_AVERAGE FROM TEAMSTATS;
这样的结果与SUM的不一样,正确的输入应该是:
SELECT AVG(HITS)/AVG(AB) TEAM_AVERAGE FROM TEAMSTATS;
这样就与SUM的结果一样了。
AVG 函数也只能对数字进行计算。
如果你想知道某一列中的最大值,请使用MAX。例如:
SELECT MAX(HITS) FROM TEAMSTATS;
取HITS列中的最大值。
SELECT NAME FROM TEAMSTATS WHERE HITS=MAX(HITS);
这是个错误的语法。
原因是汇总函数无法在WHERE 子句中使用。
MAX可以用在字符串查询中,它将返回字符最多的字符串。
MIN 与MAX 类似它返回一列中的最小数值。
用法也与MAX相似。这里就不多举例。
你可以同时使用MAX 和MIN 函数以获得数值的界限,例如:
SELECT MIN(AB) MAX(AB) FROM TEAMSTATS;
VARIANCE (方差)不是标准中所定义,的但它却是统计领域中的一个至关重要的数值,使用方法如下:
SELECT VARIANCE(HITS) FROM TEAMSTATS;
VARIANCE 也是一个只应用于数值对象的函数。
这是最后一个统计函数,STDDEV 返回某一列数值的标准差,它的应用示例如下:
SELECT STDDEV(HITS) FROM TEAMSTATS;
同样此函数也只对数值对象起作用。
这些统计函数也可以在一个语句中同时使用
SELECT COUNT(AB), AVG(AB), MIN(AB), MAX(AB), STDDEV(AB),VARIANCE(AB), SUM(AB) FROM TEAMSTATS;
这里一共提出了7个函数,前五个是我们比较常用的函数,后面两个我们并不常用,所以大家在学习时,务必要牢记前五个我们最长用的汇总函数,至于后面的两个根据我们自身的情况和个人的爱好去决定要不要学习他,但是我们要知道有这样的函数存在!
(本篇完)
与本文相关的文章本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 sum函数多条件求和 的文章

 

随机推荐