看板 Database 關於我們 聯絡資訊
有人提到如果有多個結果的話 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)