我们有 3个 tables:
1. table: paper (paper_id, paper_name, paper_year, paper_conference)
2. table: author(author_id,  author_name, author_institution)
3. table: co_author(author_id, paper_id, co_author_no)第一个论文table
paper_id:  论文编号 主码
paper_name: 论文名
paper_year: 论文发表年
paper_conference: 论文发表大会比如: 1 Archiving Scientific Data 2002 SIGMOD第二个作者table
author_id: 作者编号 主码
author_name: 作者名
author_institution: 隶属机构比如:4 Alberto O. Mendelzon University of Toronto
第三个协同作者table
author_id: 作者编号 一个作者可以写多本书
paper_id:  论文编号 一篇论文可以有多个作者参与
co_author_no: 同一论文作者的位置 比如 第一作者 第二作者第一题:给一个整数 x, 找到所有的配对 (aid,in), 其中 “aid” 是一个作者编号 表示这个作者跟来至最少x个不同机构的作者合作完成过论文(可以是不同论文), “in” 是不同机构的总数.比如, 作者1和来至三个不同机构的六个作者合作过. 作者2和来自四个不同机构的四个作者合作过 作者3和一个来自同机构的作者合作过
 
输入: 3
输出: (作者1, 3)
      (作者2, 4)第二题. 给出一个 论文发表大会 c 和 论文发表年 y, 找出在 y年,c大会,发表论文最过的机构比如, 如果 c=”Database conference”, y=1999, 如果 SFU 和 UBC 两个机构有并列第一多的论文发表,那个应该两个机构一起输出

解决方案 »

  1.   

    1.
    select  
       b.author_id as aid,count(diastinct  author_institution) as [in]
    from
       a
    join c on
       a.paper_id=c.paper_id
    join b on
       b.作者编号=c.作者编号
    and
       b.作者编号 in(select 作者编号 from b group by 作者编号 having count(1)>=x)
      

  2.   

    select  
       b.author_id as aid,count(diastinct  author_institution) as [in]
    from
       a
    join c on
       a.paper_id=c.paper_id
    join b on
       b.作者编号=c.作者编号
    and
       b.作者编号 in(select 作者编号 from b group by 作者编号 having count(1)>=x)
    group by
       b.author_id 
      

  3.   

    2.
    select
      top 1 author_institution with ties
    from
    (
    select
      b.author_institution,count(author_id) as num  
    from
      a
    join c on
       a.paper_id=c.paper_id
    join b on
       b.作者编号=c.作者编号
    group by
       b.author_institution
    )t
    order by 
       t.num desc
       
      

  4.   

    谢谢小f哦 第一个运行挺好的 第二个好像稍微有点问题 我自己再想想不是不想写 学期末被os的东西搞得很头疼 这个马上又要交了实在是时间很赶啊
      

  5.   


    这里面的a,b,c是指题里面1,2,3。paper,author,和co_author 三个table吗?sql里面不需要先定义吗?比如author a
      

  6.   


    lz,我算是服了你拉,你还是先好好把SQL基础的知识学习一下吧