题目:表中有ABC三列(字段?),如果A大于B则取A值,否则取B值,如果B大于C则取B值,否则取A值。用SQL语句实现。

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

13 个解决方案

#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


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

楼主没有讲清楚,是两个结果还是一个

#3


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

楼主没有讲清楚,是两个结果还是一个


原题目就是这样的 也没说清楚 我想应该是指只取一个结果吧

#4


感觉也没有那么简单:
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

#5


引用 3 楼 ycnxz 的回复:
原题目就是这样的 也没说清楚 我想应该是指只取一个结果吧


一个结果 ,楼主你迭代一下就行了啊。

select IF(a>b,a,if(b>c,b,a))

#6


引用 5 楼 ACMAIN_CHM 的回复:
引用 3 楼 ycnxz 的回复:

原题目就是这样的 也没说清楚 我想应该是指只取一个结果吧


一个结果 ,楼主你迭代一下就行了啊。

select IF(a>b,a,if(b>c,b,a))


应该是 select IF(a>b,a,if(b>c,b,c))吧?是有笔误吧?

因为我从未SQL用过IF所以不知道,看了你们之前的回复就知道了,嘿嘿。

如果不用IF(),而用IF search_condition THEN statement_list这样的怎么用,谁知道?

#7



如果A大于B则取A值,否则取B值,如果B大于C则取B值,否则取A值。

正确结果是什么?
比如:
A B C:3 2 1
A>B 3
B>C 2
那么最终结果是什么?2 or 3

select if((a <b and b <c) or (a>b and b <c),a,b) from tt 
我的结果是2

#8


引用 7 楼 WWWWA 的回复:
如果A大于B则取A值,否则取B值,如果B大于C则取B值,否则取A值。

正确结果是什么?
比如:
A B C:3 2 1
A>B 3
B>C 2
那么最终结果是什么?2 or 3

select if((a  <b and b  <c) or (a>b and b  <c),a,b) from tt
我的结果是2

我认为
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

#9


呵呵,理解有歧义了,
面试时的题目不会那么简单吧?
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

#10


引用 6 楼 ycnxz 的回复:
 

应该是 select IF(a>b,a,if(b>c,b,c))吧?是有笔误吧? 

因为我从未SQL用过IF所以不知道,看了你们之前的回复就知道了,嘿嘿。 

如果不用IF(),而用IF search_condition THEN statement_list这样的怎么用,谁知道? 


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
这是程序的语法了,要看你用什么程序语言,在存贮过程中可以。


#11


引用 10 楼 ACMAIN_CHM 的回复:
引用 6 楼 ycnxz 的回复:




应该是 select IF(a>b,a,if(b>c,b,c))吧?是有笔误吧?

因为我从未SQL用过IF所以不知道,看了你们之前的回复就知道了,嘿嘿。

如果不用IF(),而用IF search_condition THEN statement_list这样的怎么用,谁知道?


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




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

#12


引用 10 楼 ACMAIN_CHM 的回复:
而用IF search_condition THEN statement_list
这是程序的语法了,要看你用什么程序语言,在存贮过程中可以。 


哦 我看到手册里 不知道怎么用 有例子吗?

#13


没人回啦?那明天结贴。

#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


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

楼主没有讲清楚,是两个结果还是一个

#3


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

楼主没有讲清楚,是两个结果还是一个


原题目就是这样的 也没说清楚 我想应该是指只取一个结果吧

#4


感觉也没有那么简单:
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

#5


引用 3 楼 ycnxz 的回复:
原题目就是这样的 也没说清楚 我想应该是指只取一个结果吧


一个结果 ,楼主你迭代一下就行了啊。

select IF(a>b,a,if(b>c,b,a))

#6


引用 5 楼 ACMAIN_CHM 的回复:
引用 3 楼 ycnxz 的回复:

原题目就是这样的 也没说清楚 我想应该是指只取一个结果吧


一个结果 ,楼主你迭代一下就行了啊。

select IF(a>b,a,if(b>c,b,a))


应该是 select IF(a>b,a,if(b>c,b,c))吧?是有笔误吧?

因为我从未SQL用过IF所以不知道,看了你们之前的回复就知道了,嘿嘿。

如果不用IF(),而用IF search_condition THEN statement_list这样的怎么用,谁知道?

#7



如果A大于B则取A值,否则取B值,如果B大于C则取B值,否则取A值。

正确结果是什么?
比如:
A B C:3 2 1
A>B 3
B>C 2
那么最终结果是什么?2 or 3

select if((a <b and b <c) or (a>b and b <c),a,b) from tt 
我的结果是2

#8


引用 7 楼 WWWWA 的回复:
如果A大于B则取A值,否则取B值,如果B大于C则取B值,否则取A值。

正确结果是什么?
比如:
A B C:3 2 1
A>B 3
B>C 2
那么最终结果是什么?2 or 3

select if((a  <b and b  <c) or (a>b and b  <c),a,b) from tt
我的结果是2

我认为
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

#9


呵呵,理解有歧义了,
面试时的题目不会那么简单吧?
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

#10


引用 6 楼 ycnxz 的回复:
 

应该是 select IF(a>b,a,if(b>c,b,c))吧?是有笔误吧? 

因为我从未SQL用过IF所以不知道,看了你们之前的回复就知道了,嘿嘿。 

如果不用IF(),而用IF search_condition THEN statement_list这样的怎么用,谁知道? 


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
这是程序的语法了,要看你用什么程序语言,在存贮过程中可以。


#11


引用 10 楼 ACMAIN_CHM 的回复:
引用 6 楼 ycnxz 的回复:




应该是 select IF(a>b,a,if(b>c,b,c))吧?是有笔误吧?

因为我从未SQL用过IF所以不知道,看了你们之前的回复就知道了,嘿嘿。

如果不用IF(),而用IF search_condition THEN statement_list这样的怎么用,谁知道?


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




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

#12


引用 10 楼 ACMAIN_CHM 的回复:
而用IF search_condition THEN statement_list
这是程序的语法了,要看你用什么程序语言,在存贮过程中可以。 


哦 我看到手册里 不知道怎么用 有例子吗?

#13


没人回啦?那明天结贴。