Sign in to follow this  
Followers 0
madmac33

How to do a calculation on an aggregate function in an ExecuteSQL statement

7 posts in this topic

Hi,

 

I have very limited SQL experience and am trying to do some calculations on a SELECT statement in a local FMP database;

 

When I do:

SELECT COUNT(tab) as t, SUM("amounts") as a

FROM SummaryData

WHERE tab >15 GROUP BY tab

 

Result is:

16, -152

17, 113

18, 255

 

When I add in a calculation:

SELECT COUNT(tab) as t, SUM("amounts") as a, a * t

FROM SummaryData

WHERE tab >15 GROUP BY tab

 

Result is (invalid):

?

 
I have tried various combinations that seem to work on standard SQL systems, but Filemaker errors. Does Filemaker SQL not support calculations?
 
Any ideas or pointers would be greatly appreciated.
 
 

Share this post


Link to post
Share on other sites

Lets say that Filemakers SQL power is kinda limited. The more you dive in, the more problems you'll encounter. Filemaker is using SQL since Version 10 I think. You have to give them some time :)

Share this post


Link to post
Share on other sites

Maybe a*t as something? Don't have time to test right now. But I think it is possible.

 

http://filemakerhacks.com/2012/10/19/the-missing-fm-12-executesql-reference/

 

I tried a*t as test, as suggested Fitch, but no luck. Maybe calculations on aggregates just not work with filemaker SQL at this stage, as eluded to by Electric_Soul. 

 

Perhaps I'll have to load up MAMP (does it still exist??) and play with mySQL, etc.

Share this post


Link to post
Share on other sites

When I think about it.......     your query must not work. On which database did your sucsseslfully try your query, where you referenced the aliases in the select  statement?

 

There is a processing order in sql. And this order evaluates aliases with the select statement. The selection of rows comes before that.

 

A simple query like this should not work either, because the where clause doesn't know w. w is being evaluated wit the select clause, and that one comes after there where clause.

 

select weight as w,FROM garbage
where w > 10
 

Share this post


Link to post
Share on other sites

It has been my experience that filemaker FQL does not like it when you mix aggregate functions with non aggregate functions. If you have Filemaker Advanced you could write a recursive custom function that processes your SQL array result to arrive at the desired result.

Share this post


Link to post
Share on other sites

It has been my experience that filemaker FQL does not like it when you mix aggregate functions with non aggregate functions. If you have Filemaker Advanced you could write a recursive custom function that processes your SQL array result to arrive at the desired result.

Instead of a CF you could use the VirtualList technic to do calculations on sql-aggregates.
 
Assuming the table VirtualList is filled with the global variable $$vl and the virtuallist column separator is "||", you could do it like this.
 
Let ( [
 
$$vl = ExecuteSQL ( 
"SELECT COUNT(tab), SUM("amounts") 
FROM SummaryData 
WHERE tab >15 GROUP BY tab"
; "||" ; "" )
 
] ;
 
ExecuteSQL ( 
"SELECT Field01, Field02, NUMVAL(Field01) * NUMVAL(Field02)
FROM VirtualList
WHERE Field01 IS NOT NULL"
; "" ; "" )
 
)
 
the NUMVAL operator is needed, if the virtuallists fields are text fields.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Similar Content

    • By scain101
      I need some help with ExecuteSQL.

      I have a TO “Sales” that is related to Estimates, Inspections, and Proposals via ID_SALES:id_sales.

      I created some simple ExecuteSQL calculations that work on Estimates and Inspections, but the same calculations will not work with the related Proposals TO. 

      ·         I know that the relationship is good because I can get the SUM and COUNT from Proposals with a basic calculation (not ExecuteSQL).

      ·         I know there is not a problem with the name on the related Proposals TO (like a space between words). I've copied and pasted the working calculations and I have started from scratch, and neither works.

      This statement works:

      ExecuteSQL ( "SELECT COUNT

      (ID_ESTIMATES) FROM TO40_ESTIMATES

      WHERE ID_SALES = ? “ ;

      "" ; "" ;

      TO13_sales_ESTIMATES||id_sales::id_sales )

      ---

      This statement does not work:

      ExecuteSQL ( " SELECT COUNT

      (ID_PROPOSAL) FROM TO26_PROPOSALS

      WHERE ID_SALES = ? ";

       "" ; "" ;

      TO13_sales_PROPOSALS||id_sales::id_sales)


       
      Any help would be appreciated.

      SC

    • By Ben Moore
      I am trying to create a list of dates from multiple tables to create a gantt chart.  My projects have Shipping dates, Installation dates and task item dates.  Each of which come from their own tables.  Is there a good way to import all of these dates into one table related to the project, each with it's own record of Start date and end date.
      I'd rather have:
      Project | Item | Start_Date | End_Date|
      than:
      Project | Install_Start_Date | Install_End_Date| Ship_date | Ship_Arrive_Date | Task_Start_Date | Task_End_date
    • By DataLackey
      Hi,
      I'm trying to use Filemaker to manage a mysql database on Amazon RDS. I'm trying to set up an import layout that will allow users to load data into into the RDS database.
      Mostly, Filemaker and mysql are playing well together. But I'm getting a problem when I try import data using LOAD DATA LOCAL INFILE . I've run the query successfully with a different client on the same database (Sequel Pro) but when I run it using the Execute SQL script step in Filemaker I get an error, with the message "Load data local infile forbidden".
      I've looked around online, and it seems like I need the server and client to both enable 'local_infile'. I know it's enabled on the server (because I can check manually, and the query works on a different client). Does anyone know how to check or change this within Filemaker?
      Otherwise, does anyone have any ideas as to how I might work around this? Unfortunately I can't call a stored procedure on the server because the query relies on variables. My understanding is that you can't use variables in a LOAD DATA INFILE statement on the server, and you can't use LOAD DATA INFILE in a prepared statement.
      Does anyone know how to change the local_infile variable within the Filemaker mysql client, or failing that, does anyone have a good workaround for the restriction on variables with the LOAD DATA INFILE statement if I run it on the server?

      In case it's not already blatantly obvious, I don't really know what I'm doing, so any help (especially help that is dumbed down) would be hugely appreciated.
      Thanks,
      John
       
    • By laurend
      I created a database to track permits by building. Each permit type is stored in its own table. The only link between tables is the Building Name which is the physical location where the permit exists.
      Tables:
      v_Buildings (fields include building name, ID, building status, address, city, state, zipcode)
      Air (ID, Building Name, Expiration Date, Days_to_Expiration, Type, etc...)
      Water
      Food
      Elevator
      ...9 permit types in all, and I will add more in the future
      Each of these tables has the same fields in common:
      BuildingName
      PermitExpirationDate
      PermitOwner
      Days_to_Expiration
      I created a Dashboard layout with the idea that users could select a building name from a drop-down menu and then see all of the permits for that particular building along with their expiration date and the permit owner's name. I am just baffled as to how to do this across multiple tables. I have looked at SQL, Join tables, portals etc...., and I cannot figure out how to aggregate all of this information into one view for users.  I cannot even seem to figure out what table should be used for the Dashboard layout. I would love to hear from the community the best and hopefully scalable approach for designing this layout.  Thanks in advance from a novice user.
       
    • By Ron Neville
      Can anyone see whats wrong here:
      Let     (     [     invoiceID = id ;     decimal = Left ( Evaluate ( 1/2 ) ; 1 ) ;     SQL = ExecuteSQL    (                     "                     SELECT SUM ( b.\"Amount\" )                     FROM \"Invoice Data\" b                     WHERE b.\"id_Invoice\" = ? AND b.\"Type\" = Rental                     "                     ; "" ; "" ;                     invoiceID                     )     ] ;     If ( SQL ; Substitute ( SQL; "." ; decimal ) ; 0 )     )
      There are 2 tables Invoice and Invoice Data. The items added to the invoice can either be a rental, Sale or service item and want to total each type on the invoice layout.. Thank you