Subject | Re: [firebird-support] How do I return an accurate COUNT(*) when a JOIN is involved? |
---|---|
Author | Martijn Tonies (Upscene Productions) |
Post date | 2014-10-13T18:56:23Z |
Hello Mike,
In the second query, you’re counting records and then do the DISTINCT, so
the
result is 32, and if you “distinct” that result, there’s only 1 record,
with a value
of 32.
What you seem to want, is to COUNT(DISTINCT(...))
With
regards,
Martijn Tonies
Upscene Productions
http://www.upscene.com
Download Database Workbench for Oracle, MS SQL Server, Sybase SQL
Anywhere, MySQL, InterBase, NexusDB and Firebird!
Martijn Tonies
Upscene Productions
http://www.upscene.com
Download Database Workbench for Oracle, MS SQL Server, Sybase SQL
Anywhere, MySQL, InterBase, NexusDB and Firebird!
Sent: Monday, October 13, 2014 8:50 PM
Subject: [firebird-support] How do I return an accurate COUNT(*)
when a JOIN is involved?
Greetings All,
Firebird 1.5.3 (Yes I know it is old)
Using the following syntax with 09/01/14 and
09/04/14 for the parameters fetches 20 distinct records
SELECT DISTINCT
DCD.ACCT_ID,
AC.CLT_ID
FROM DEBTOR_CASE_DEBT DCD
JOIN ACCT_CASE AC ON AC.ACCT_ID = DCD.ACCT_ID
AND AC.CASE_ID = DCD.CASE_ID
WHERE DCD.STATUS_DATE BETWEEN :V_BEGIN_DATE AND :V_END_DATE
AND DCD.STATUS_CODE = 'B'
FROM DEBTOR_CASE_DEBT DCD
JOIN ACCT_CASE AC ON AC.ACCT_ID = DCD.ACCT_ID
AND AC.CASE_ID = DCD.CASE_ID
WHERE DCD.STATUS_DATE BETWEEN :V_BEGIN_DATE AND :V_END_DATE
AND DCD.STATUS_CODE = 'B'
Using this syntax with 09/01/14 and 09/04/14 for
the parameters fetches a count of 32
SELECT DISTINCT
COUNT(DCD.PERSON_ID)
FROM DEBTOR_CASE_DEBT DCD
JOIN ACCT_CASE AC ON AC.ACCT_ID = DCD.ACCT_ID
AND AC.CASE_ID = DCD.CASE_ID
WHERE DCD.STATUS_DATE BETWEEN :V_BEGIN_DATE AND :V_END_DATE
AND DCD.STATUS_CODE = 'B'
FROM DEBTOR_CASE_DEBT DCD
JOIN ACCT_CASE AC ON AC.ACCT_ID = DCD.ACCT_ID
AND AC.CASE_ID = DCD.CASE_ID
WHERE DCD.STATUS_DATE BETWEEN :V_BEGIN_DATE AND :V_END_DATE
AND DCD.STATUS_CODE = 'B'
How do I accurately return the correct count using
the COUNT() function? In this case it should beturn 20 not 32
Any ideas appreciated.
Thanks,
Mike