如何对SQL数据库中每一行存的数大小进行比较,并将最大的那个数所在的列名找到

如何对SQL数据库中每一行存的数大小进行比较,并将最大的那个数所在的列名找到,第1张

分两步走比较好,用脚本处理,效率也比较高,能不用子查询就不用子查询:

比如php结合mysql:

$res=mysql_query("select * from student_scores")

while($row=mysql_fetch_array($res))

{

$scores=array($row['math'],$row['phycis'],$row['chem'],$row['eng'])

asort($scores)//排序保持索引关系

$max=array_pop($scores)// 找出成绩最好的科目

echo $max//

echo array_flip($max)

}

在数据库中当然是可以对001和005使用聚合函数max()进行大小比较的,但是我们必须要留意文本型数值和数字型数值在比较数值大小时,数据库引擎对不同的字段数据类型其比较的结果可能会有所不同!下面举例说明一下:

比如 10和9,按数字比较大小则 10>9,但是如果按文本比较大小则 '10'<'9',因为两个字串比较大小时是从左边第一个字符开始逐个字符进行比较的,一旦分出高低,比较将立即结束不再进行余下比较。'10'开头为1,'9'开头为9首尾字符即可分出大小,这样文本数字'10'就会小于文本数字'9'。我们再来看看001和005,则不论是按数字类型还是按文本类型比较均为前者小于后者,按数字比较的话自然1小于5,若按字串比较,前两位打成平手到第三个字符时就分出了大小。

数据库中字符和字串比较大小的排序规则基本上与我们日常使用的字词典里的排序规则相互吻合,两个字符或字串根据它们在字典中的排序位置我们通常不必依赖电脑运算就可以判断出谁大谁小。

现在我们实测一下使用聚合函数Max()对比文本数据类型字段和数字类型字段的比较结果,以下是SQL实验代码:

drop table if exists t2

-- 创建测试表t2含文本数据型“数字”字段和数字类型字段

create table t2(id int auto_increment primary key,

charNum varchar(10),digitNum int)

-- 插入测试数据

insert into t2(charNum,digitNum) values

('001',1),('005',5),('0010',10)

-- 查看待测数据

select * from t2

-- 直接选出文本“数字”字段中的最大值和数字字段中的最大值

select max(charNum) as maxCharNum,

max(digitNum) as maxDigitNum from t2

-- 将文本“数字”字段转换为数字类型后再选出其最大值,以及直接选出数字字段最大值

select max(convert(charNum,signed)) as maxConvertCharNum,

max(digitNum) as maxDigitNum from t2

测试截图:

待测数据:

直接对文本和数字两种数据类型字段使用Max()函数的返回结果对比:

我们可以看到直接对文本数据类型字段使用Max函数选出的最大值是“005”而非“0010”

下面是将文本数据类型数字转换为数字数据类型后才使用Max函数的对比结果:

我们可以看到对文本类型字段使用Max函数的最大值已经跟数字数据类型字段的最大值一样了,都是10。

总结:

直接对字符型数据类型字段使用聚合函数Max()、Min()所返回的极值将遵循一般字(词)典对字(词)里设定的排序规则,所选出的最大(小)值不一定是数字意义上的极值,如果需要得出严格数字意义上的极值就必须先进行类型转换,否则得出的结果可能会与期望值有出入。

sql="select * from [表] where 字段 between "&request("值1")&" and "&request("值2")

这样就行了。

access认为是数值型的。只有加上''才是文本型的

对于百度消息补充:

修改了下代码,代码:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>

<!--#include file="connection.asp" -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/htmlcharset=gb2312" />

<title>无标题文档</title>

<link href="style.css" rel="stylesheet" type="text/css" />

</head>

<%

dim ZFAVG1,ZFAVG

ZFAVG1=trim(request("ZFAVG1"))

ZFAVG2=trim(request("ZFAVG2"))

'判断是否为数字,并且值1大于值2.有一个不成立。则返回

if not ( IsNumeric(ZFAVG1) and IsNumeric(ZFAVG2) and ZFAVG1>ZFAVG2 ) then

response.write "<script>alert('请填写分数区间!')history.back()</Script>"

response.end

end if

%>

<body>

<table width="100%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#D3D9E1">

<%

Set rs= Server.CreateObject("ADODB.Recordset")

'sql语句,查询出一个区间

sql="select * from grade where ZFAVG between "&ZFAVG1 &" and "&ZFAVG2

rs.open sql,conn,1,1

if rs.eof and rs.bof then

response.write "<p align='center'>对不起,没有找到相关新闻</p>"

else

%>

<tr bgcolor="#86C2FF">

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB">批次名称</td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB">院校代码</td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB">院校名称</td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB">录取人数</td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB">最高总分</td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB">最低总分</td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB">平均分</td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB">最好的名次</td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB">最不好的名次</td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB">平均名次</td>

</tr>

<%

i=0

do while not rs.eof

%>

<tr bgcolor="#FFFFFF">

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB"><%=rs("PCMC")%></td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB"><%=rs("YXDH")%></td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB"><%=rs("YXMC")%></td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB"><%=rs("LQRS")%></td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB"><%=rs("ZFMAX")%></td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB"><%=rs("ZFMIN")%></td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB"><%=rs("ZFAVG")%></td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB"><%=rs("MAXMC")%></td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB"><%=rs("MINMC")%></td>

<td width="10%" align="center" valign="middle" bgcolor="#F9FBFB"><%=rs("AVGMC")%></td>

</tr>

<%

rs.movenext

i=i+1

loop

%>

<tr bgcolor="#FFFFFF">

<td height="24" colspan="12" bgcolor="#F9FBFB"><div align="center">关键字<font color="#FF0000"><strong><%=ZFAVG%></strong></font>,共为您找到<font color="#FF0000"><%=i%></font>条新闻</div></td>

</tr>

<%

end if

rs.close

set rs=nothing

%>

</table>

</body>

</html>

要是回答的内容有问题,或认为不妥,请发送百度消息给我,消息内容加上本页网址哦。。

·


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10073258.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存