zstarling

  • 语法: LOOKUP(查找值,查找区域,结果区域)
  • 举例: LOOKUP(1,0/((\$A$2:\$A\$9=E2)*(\$B\$2:\$B\$9=F2)),\$C\$2:\$C$9)
  • 语法: VLOOKUP(查找值,查找区域,结果区域,精确/模糊匹配)
  • **模糊查询(TRUE/1)结果展示:**
  • **精准查询(FALSE/0)结果展示:**


语法: LOOKUP(查找值,查找区域,结果区域)
  • 注意: Lookup() 多条件查找时无需排序,正常LOOKUP函数要求“查找区域”中的值必须按升序排列,因为是二分法原理
举例: LOOKUP(1,0/(($A$2:$A$9=E2)*($B$2:$B$9=F2)),$C$2:$C$9)
  • 自测公式 =LOOKUP(1,0/(($O$1:$O$22=C1)*($P$1:$P\$22=D1)),$R$1:$R$22)
  • 条件值显示:=LOOKUP(1,0/(
({FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE})
 *
({FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE})
),

  • $R多条件查询 mysql 多条件查询lookup_数组R$22)
  • 查找值显示: =LOOKUP(1,
• {#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!},
 $RR$22)

分解步骤:

  • 第一步,括号内$A$2:$A$9=E2和$B$2:$B$9=F2,两个等式,很明显,分别代表两个条件。
  • 注意
  • 一,范围在等号前面,值在等号后面。顺序不能乱;
  • 二,返回的结果分别是一串数组而不是单一的值。这里数组里的数据有两种,TRUE和FALSE
  • 第二步,两个条件相乘,专业术语称为【逻辑与】,即两条件同时满足,返回的结果,由于两个条件每个返回的都是一串数组,那么相乘得到的结果,也是一串数组,而非单一的值。
  • 注意 :这里的数组数据也是两种,0和1。
  • 第三步,用零值,去除以第二步得到的结果,那么原本第二步是0值的,0作为分母无意义,返回错误值#DIV/0!,而仅有第二步结果为1的,正确算出结果得到零值。
  • 第四步,
  • 多条件查询 mysql 多条件查询lookup_二分法_02

  • 第五步,接下来就是二分法原理了,在只有0和错误值组成的数组中,查找数字1,由于LOOKUP函数使用二分法,默认数据从小到大排序,二分值0比1小,就会一直往下查找,于是就找到了最后一个0值(LOOKUP函数忽略错误值,故二分法不会找到错误值),这条数据就是同时满足两个条件的、我们所需要的数据了。
  • 回到我们第三步提出的疑问,用零值去除以第二步的结果,意义何在?
  • 很简单,意义就在于将不符合条件的值从第二步的结果0,转变为错误值#DIV/0!,这样就可以避免LOOKUP函数查找时,在一 堆0和1组成的数组中,用二分法查找1,这样是不准确的,
    所以,用0去除,将第二步结果为0的转变为错误值,LOOKUP就可以直接将其PASS掉不考虑。

前三步图解,示例:

多条件查询 mysql 多条件查询lookup_数组_03

多条件查询 mysql 多条件查询lookup_二分法_04

多条件查询 mysql 多条件查询lookup_数据_05

语法: VLOOKUP(查找值,查找区域,结果区域,精确/模糊匹配)

条件结果:

给额

价格

0

0

1

550

10001

650

20001

1500

50001

2500

模糊查询(TRUE/1)结果展示:

模糊查询可以做分组查询时候匹配

给额

价格

公式

0

550

VLOOKUP(S18,$ST$6,2,TRUE)

1500

550

VLOOKUP(S19,$ST$6,2,TRUE)

4500

550

VLOOKUP(S20,$ST$6,2,TRUE)

6500

550

VLOOKUP(S21,$ST$6,2,TRUE)

10000

550

VLOOKUP(S22,$ST$6,2,TRUE)

12500

650

VLOOKUP(S23,$ST$6,2,TRUE)

21500

1500

VLOOKUP(S24,$ST$6,2,TRUE)

90500

2500

VLOOKUP(S25,$ST$6,2,TRUE)

精准查询(FALSE/0)结果展示:

给额

价格

公式

0

0

VLOOKUP(S18,$ST$6,2,0)

10001

650

VLOOKUP(S19,$ST$6,2,0)

50001

2500

VLOOKUP(S20,$ST$6,2,0)

10001

650

VLOOKUP(S21,$ST$6,2,0)

10001

650

VLOOKUP(S22,$ST$6,2,0)

20001

1500

VLOOKUP(S23,$ST$6,2,0)

1

550

VLOOKUP(S24,$ST$6,2,0)