作者sai25 (hyde)
看板Database
标题Re: [SQL ] 这个问题SQL该怎麽下?
时间Fri Aug 26 00:50:19 2011
有人提到如果有多个结果的话 TOP 1就不够用
所以就在改一下
也想到应该用count而不是SUM
1.原写法再加个CTE子查询去处理
WITH A_CTE AS(
select top 100 S.SNAME,A.S#,count(A.P#) P_COUNT from SPJ A left join S
on A.S#=S.S# where
A.P# = P2 group by A.S#,S.SNAME order by count(A.P#) DESC )
select SNAME,P_COUNT from A_CTE where P_COUNT >=
ALL(select P_COUNT from A_CTE)
2.直接改用ALL去处理
select S.SNAME,A.S#,count(A.P#) P_COUNT from SPJ A left join S
on A.S# = S.S# where A.P# = P2 group by A.S#,S.SNAME
having COUNT(A.P#) >= ALL(select count(A.P#) from
SPJ where P# = P2 group by S# )
因为没有提供测试资料 所以不能检测
在帮我看看有没有错XD
※ 引述《sai25 (hyde)》之铭言:
: select top 1 S.SNAME,A.S#,sum(A.P#) from SPJ A left join S
: on A.S#=S.S#
: where
: A.P# = P2 group by A.S#,S.SNAME order by sum(A.P#) DESC
: 这样对吗?
: ※ 引述《thanksgive (乾温)》之铭言:
: : 有四张关联分别为,
: : S(S#,SANME)
: : P(P#,PNAME)
: : J(J#,JNAME)
: : SPJ(S#,P#,J#,QTY)
: : 题目要找出: 供应零件代号P2最多的供应商名字?
: : 解答很明显写错了,
: : 可是正确的我也想不出来 :(
: : 以下是我自己写的,这样对吗?
: : 感觉写得好冗长,也不知道对不对...
: : 为节省空间+使容易了解下面的这段会替换最下面的查询
: : _____________________________________
: : [select S.S# as sno, S.SNAME as name, SUM(SPJ.QTY) as T
: : from S, SPJ
: : where S.S#=SPJ.S# and
: : SPJ.p#='p2'
: : group by S.S#, S.SNAME] as TAB*
: : ______________________________________
: : select name
: : from TAB1
: : where T =
: : (select MAX(T)
: : from TAB2
: : )
: : 请大家替我解惑
: : 谢谢 :))
--
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 编辑: sai25 来自: 220.132.216.47 (08/26 00:52)