题目:表中有ABC三列(字段?),如果A大于B则取A值,否则取B值,如果B大于C则取B值,否则取A值。用SQL语句实现。
面试时遇到的题目,怎么写?

解决方案 »

  1.   

    select IF(a>b,a,b),if(b>c,b,a)
    from t参见手册中IF()函数。 
    http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  2.   

    感觉也没有那么简单:
    select if((a<b and b<c) or (a>b and b<c),a,b) from tt
    or
    select if((a<b and b<c) or (a>b and b<c),a,
    if((a<b and b>c) or (a>b and b>c),b,a))
     from tt
      

  3.   


    一个结果 ,楼主你迭代一下就行了啊。select IF(a>b,a,if(b>c,b,a))
      

  4.   


    应该是 select IF(a>b,a,if(b>c,b,c))吧?是有笔误吧?因为我从未SQL用过IF所以不知道,看了你们之前的回复就知道了,嘿嘿。如果不用IF(),而用IF search_condition THEN statement_list这样的怎么用,谁知道?
      

  5.   


    如果A大于B则取A值,否则取B值,如果B大于C则取B值,否则取A值。正确结果是什么?
    比如:
    A B C:3 2 1
    A>B 3
    B>C 2
    那么最终结果是什么?2 or 3select if((a <b and b <c) or (a>b and b <c),a,b) from tt 
    我的结果是2
      

  6.   

    我认为
    A B C:3 2 1  应该取3
    A B C:3 2 4  还是应该取3
    A B C:3 4 1  应该取4
    A B C:3 4 5  应该取5
      

  7.   

    呵呵,理解有歧义了,
    面试时的题目不会那么简单吧?
    A B C:3 2 1  应该取3  or 2 
    A B C:3 2 4  还是应该取3 or 3
    A B C:3 4 1  应该取4 or 4
    A B C:3 4 5  应该取5 or 3
      

  8.   


    select IF(a>b,a,if(b>c,b,a)) 
    根据你的条件没有笔误。
    如果A大于B则取A值,否则取B值,如果B大于C则取B值,否则取A值。
    if(a>b)
      a
    else
      if b>c
         b
      else 
         a而用IF search_condition THEN statement_list
    这是程序的语法了,要看你用什么程序语言,在存贮过程中可以。
      

  9.   


    原来是我自己错了 应该是
    如果A大于B则取A值,否则取B值,如果B大于C则取B值,否则取C值。
    sorry 打字太快 嘿嘿