MySQL SELECT基于多列的聚合

时间:2012-10-09 07:05:06

标签: mysql sql

我在MySQL中有一个表格,其中包含许多普通字段和一些“审批”字段,如果相关数据已获批准则包含1,否则为0。例如,

*==============================================================*
* id  |  fname  | lname | fname_approved | lname_approved | ...*
*--------------------------------------------------------------*
* ... |   ...   |  ...  |        0       |        1       | ...*

实际上,还有更多列,但它更多相同。我希望能够做的是选择一个值,如果all_approved字段的所有包含1并且相等,则_approved等于1如果任何字段包含0,则为0.在SQL中是否有任何简单的方法可以执行此操作,或者我是否需要在应用程序逻辑中处理它?<​​/ p>

4 个答案:

答案 0 :(得分:6)

你可以使用像

这样的乘法
select (fname_approved * lname_approved) as all_approved from my_table;

这样,如果任何_approved为0,则all_approved将为0,否则为1

答案 1 :(得分:1)

尝试此查询,

SELECT IF(fname_approval = 1 && lname_approval   = 1 && mname_approval= 1, 'all_approved ', 'Not-Approved') AS approved_status 
from table_name

答案 2 :(得分:0)

如果批准列的数量是固定的,并且其中的值是0或1,那么这样的事情会有所帮助

Select (fname_approval + lname_approval + mname_approval) from <table_name>

此查询将为您提供总数,例如3 ..这意味着所有已被批准,因为列数与总数相同。如果总数较少,则意味着您没有获得所有批准。

您需要对列数进行硬编码(这不是一个好主意)。希望这会有所帮助。

答案 3 :(得分:0)

select 
  case 
    when  fname_approved=1 and lname_approved=1  then 1 as all_approved
    else 0 as not_approved
  end ;
 from my_table