How to avoid having long GROUP BY list when joining other tables for data?
Let's suppose you have a simple aggregate query using employee database, which shows number of employees for each project:
SELECT ep.PROJ_ID, count(*)
FROM EMPLOYEE_PROJECT ep
GROUP BY ep.PROJ_ID;
If you need more info about the project itself, you would write something like this:
SELECT ep.PROJ_ID, p.PROJ_NAME, p.PRODUCT, count(*)
FROM EMPLOYEE_PROJECT ep
JOIN PROJECT p on ep.PROJ_ID = p.PROJ_ID
GROUP BY ep.PROJ_ID, p.PROJ_NAME, p.PRODUCT;
When you have a lot of columns involved, list in GROUP BY can get very long. At some point, it would reach a limit for sort key size (see FAQ #236) of 64kB. The prevent this from happening, you can use MIN or MAX for such columns (as they return one value anyway):
SELECT ep.PROJ_ID, MAX(p.PROJ_NAME), MAX(p.PRODUCT), count(*)
FROM EMPLOYEE_PROJECT ep
JOIN PROJECT p on ep.PROJ_ID = p.PROJ_ID
GROUP BY ep.PROJ_ID





The Firebird FAQ