Trying to include additional columns in QUERY result on GoogleSheets

我是研究僧i 提交于 2019-12-25 09:38:12

问题


I'm using Google Sheets and using the following formula without any issue:

=QUERY(Sheet!A:D,"select A, max(B) where not B is null group by A label A 'Client', max(B) 'Most Recent'")

Obviously, this is returning columns A and B of the referenced data However, I would like to also return the corresponding cells from column C.

sample data: https://docs.google.com/spreadsheets/d/1CJKiDNPUWMMUbLLb-UDA6iRA2PBnlMHDsEB9vELe0Rk/edit?usp=sharing

Using this example, what I would like to see is cell G2 populated with "Pizza" (i.e., from C3), and so on.

Am I using the right formula? What do I need to change?


回答1:


What you are trying to do is not very SQL-like, because max(B) does not point to any particular row: it's just the maximum value of B among the selected rows. This value could be attained by several rows, making the choice of C, D ambiguous. I don't think that a single query can do this.

Here is an implementation with unique and several query commands.

In E2, enter =unique(A:A) to get the list of unique client names. In F2, enter

=query(A:D, "select B,C,D where A ='"&E2&"' order by B desc limit 1")

and drag this formula down. This selects all rows with the A value matching E2, and picks one with maximal B value.

You don't want to have a header row in the output of these queries so either add label B '', C '', D '' or just don't include the header row in the queried range.


Version with grouping by C,D

To also select C and D within a single query, expand the select clause

select A, max(B), C, D 

which will then require including those in the group by clause:

group by A, C, D

The formula will be

=QUERY(A:D,"select A, max(B), C, D where not B is null group by A, C, D label A 'Client', max(B) 'Most Recent'")

This does mean that the only rows to be grouped together will be those where not only A but also C and D are equal.




回答2:


A possible one-formula solution:

=ArrayFormula(IFERROR(VLOOKUP(UNIQUE(A2:A),SORT(A2:C,2,0),{1,2,3},0)))




回答3:


Here is what I did that finally worked.

In E1, enter =unique(A:A) to get the list of unique client names. In F2, enter

=query(A$2:D101, "select B,C,D where A ='"&F2&"' order by B desc limit 1")

and drag this formula down. This selects all rows with the A value matching E2, and picks one with maximal B value.

You don't want to have a header row in the output of these queries so just add desired text in header row.



来源:https://stackoverflow.com/questions/36657582/trying-to-include-additional-columns-in-query-result-on-googlesheets

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!