我试图在Google表格中编写一个SQL查询来尝试获取"匹配"来自两个不同标签的结果,但遇到了一些麻烦。
这张表基本上是一个自动评分引擎,适用于进行两部分测试(书面和实践)的教师。输入结果后,我想使用一些SQL从两个选项卡中获取结果并将它们整理成最终得分。
有一个"实用分数"标签(从相关的Google表单中获取所有数据),以及"书面评分"标签。我想获得在这两个标签中匹配的教师的名字,并为他们提供相关的分数,但我在编写正确的SQL时遇到了麻烦。
我尝试做的大部分工作都很好。我可以通过以下SQL获得最终的实用分数:
=query(PracticalScores!A2:E, "select A, count(E),SUM(E)/3 group by A")
我也可以按如下方式提取书面分数:
=query('Written Scores'!B2:C,"select B,C")
但我也想要两者的交集,以及我遇到问题的地方。
=query(A8:E, "select A,C,D where A = E")
将简单地返回名称匹配的行,并且我希望名称匹配的实例,无论行是否匹配。
也就是说,我希望名称匹配的所有行从选项卡1到选项卡2,而不仅仅是恰好排成一行的几行。
如果我没有解释清楚,请告诉我,我可以提供更多信息。非常感谢任何帮助!
答案 0 :(得分:0)
由于query
函数不支持联接,因此无法在一个查询中完成。相反,可以使用以下设备:
=arrayformula(vlookup(name column, table, # of column to extract, False))
例如,假设我有一个表
+---+-------+---+
| | A | B |
+---+-------+---+
| 2 | Jim | 3 |
| 3 | Sarah | 4 |
| 4 | Bob | 5 |
+---+-------+---+
我要添加另一列,从
中取出+---+-------+---+
| | E | F |
+---+-------+---+
| 2 | Sarah | 9 |
| 3 | Bob | 8 |
| 4 | Jim | 7 |
+---+-------+---+
基本思路是将单元格C2放入公式
=arrayformula(vlookup(A2:A, E2:F, 2, false))
将查找E列中第一个表(A列)的每个名称,并返回F列中的匹配值。结果:
+---+-------+---+---+
| | A | B | C |
+---+-------+---+---+
| 2 | Jim | 3 | 7 |
| 3 | Sarah | 4 | 9 |
| 4 | Bob | 5 | 8 |
+---+-------+---+---+
实际上,应该过滤掉空查找值以提高性能:
=arrayformula(vlookup(filter(A2:A, len(A2:A)), E2:F, 2, false))
如果第二个表包含第一个表中没有的名称,则上述公式不会返回它们。在这种情况下,最好准备一个完整的名称列表,例如
=sort(unique({Sheet1!A2:A; Sheet2!A2:A}))
从两张A列中收集名称,消除重复和排序。然后使用上面的vlookup
查找那些。