作者cutecpu (可爱中央处理器)
看板Database
标题Re: [SQL ] 高考SQL题目
时间Mon Aug 15 13:32:33 2011
用你原本写的去改的,可以应付有多个会员拥有相同最多朋友的情况:
select mId,name,bDate
from Member
where mId in (
select friend
from FriendRelation
group by friend
having count(*) = (
select max(cnt)
from (
select count(*) as cnt
from FriendRelation
group by friend
)
)
)
※ 引述《kisha024 (4545454554)》之铭言:
: : 看过去虽然有四个TABLE,实际语意让我觉得只用到前两个?
: : 请问这题有很多小题吗?
: : member and friend 这两个table
: : FriendRelation.friend 内容应该会=mid 请问题目有说明吗?
: : 先找出 FriendRelation.friend 该栏位 最多被记录的然後回头查
: : FriendRelation出 mid 然後关连到 member 这样会写了吗?
: : -- ORACLE --
: : SELECT T3.MID, T3.NAME, T3.BDATE, T2.FRIEND
: : FROM (SELECT *
: : FROM (SELECT T.FRIEND, COUNT(*) CNT
: : FROM FriendRelation T
: : GROUP BY T.FRIEND
: : ORDER BY CNT DESC) T1
: : WHERE ROWNUM = 1) T2,
: : Member T3
: : WHERE T3.MID = T2.FRIEND
: : -- MS-SQL --
: : SELECT T2.MID,T2.NAME,T2.BDATE,T1.FRIEND
: : FROM (SELECT TOP 1 FRIEND,COUNT(*) AS CNT
: : FROM FriendRelation
: : GROUP BY FRIEND
: : ORDER BY CNT DESC ) AS T1 ,
: : MEMBERS T2
: : WHERE T1.FRIEND = T2.MID
: : 应该是这样写吧 = = 我手边没办法帮你测 囧
: : 另外ORACLE 那段 要回答答案的话 T2.FRIEND
: : AND MS-SQL T2.FRIEND 都要拿掉
: : 因为题目没有说要显示这个。
: 谢谢 这题还有另一小题 我没列出 我原本是写
: select mId,name,bDate
: From Member
: Where mId in (select friend
: From FriendRelation
: group by friend
: having count(*) = max(count(*))
: )
: 我用mysql测 有语法错误 应该是max不能这样用吧
: 你提供的那两段用mysql测 也是显示有语法问题 但语意很清楚了
: THX
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.59.164.109