菜鸟求教:我建了两个表author和books,数据中一个作者写了两本书,为了不重复出现作者名字于是有了第一个问题的写法,我不明白distinct的用法,于是以第二个问题为例问下。求高手指点!!
第一个问题
select aname,max(age),max(bname),max(press_name)
  2  from author,books
  3  where age<(select avg(age) from author)
  4  and author.a_id=books.author_id group by aname
其中bname是书名,press-name是出版社名,我不明白max的作用?单纯为了能够使用group by吗?
第二个问题
select distinct aname,age,bname,press_name
  2  from author,books
  3  where age<(select avg(age) from author)
  4  and author.a_id=books.author_id;
这里面distinct是不是只有aname、age、bname和pressname的内容都用重复的时候才能将两个数据一起显示?

解决方案 »

  1.   

    1、根据作者求age最大值,max就是求最大值
    2、distinct过滤掉所有字段都重复的数据。distinct aname,age,bname,press_name 当三个字段不重复的时候数据才显示
      

  2.   

    age 可以理解为最大值,但是那两个名字怎么理解?最大名字有点说不通吧?
      

  3.   

    顶,求高手指点,不过distinct是所有字段重复是才pass点,否则只要有一个字段不重复都不会的
      

  4.   

    当出现group by时,你所select的列,要么是聚合函数,要么在group by中出现,否则会出错,此处写max(bname)取的是按书名升序排在最后的名字,就是最大的,但此处的目的并不是为了这个,
    而是为了符合基本的语法