# Fixed Function Problem

Options
Member

Hello, I have an issue that I'm working through in which I want to essentially group by two columns and find the average rank in that grouping. I then want to filter this rank to be less than 3 and count the total rows from this. All in a beastmode. The SQL behind this looks like the following:

SELECT Count(*) from

(SELECT keyword, company, avg(rank) as average_rank
FROM data
GROUP BY keyword, company
HAVING average_rank <= 3)

WHERE company = 'CompanyA'

I want to take that number that I get and essentially divide it by the total rows shown by the below SQL (please note it is the same code as above but just without the final where clause):

SELECT Count(*) from

(SELECT keyword, company, avg(rank) as average_rank
FROM data
GROUP BY keyword, company
HAVING average_rank <= 3)

Therefore, the progression of the data would look something like this:

which then with the group by would look like this:

then with the having clause would look like this:

and finally with the first code, I would get just one row and the second sql code I would get 2. So I want a final number of 50%. I want to be able to do this all in a beastmode so it is wholly dependent on what the user will filter on.

The beastmode that I got closest on is:
count(case when AVG(`blended rank`) fixed (by `Keyword`,`Company`) <= 3 then 1 end)

I then can filter company in the card level filter. I can't put the filtering of the company in the beastmode (from what I have seen) because it always leads to an error.

I then tried to have the company filtered in the card level and to have the second number look like this in the beastmode:
sum(case when AVG(`blended rank`) fixed (by `Keyword`,`Company` FILTER NONE) <= 3 then 1 end) so that the filtering of company didn't work on this number (but it doesn't in this case).