I have the following query:
select distinct profile_id from userprofile_...
union
select distinct profile_id from productions_...
How wou
Best solution is to add count of two query results. It will not be a problem if the table contains large number of records. And you don't need to use union query. Ex:
SELECT (select COUNT(distinct profile_id) from userprofile_...) +
(select COUNT(distinct profile_id) from productions_...) AS total
These will not work if in one of the COUNT(*) the result is equals to 0.
This will be better:
SELECT SUM(total) FROM ( select COUNT(distinct profile_id) AS total from userprofile_... union all select COUNT(distinct profile_id) AS total from productions_... ) x
This will perform pretty well:
select count(*) from (
select profile_id
from userprofile_...
union
select profile_id
from productions_...
) x
The use of union
guarantees distinct values - union
removes duplicates, union all
preserves them. This means you don't need the distinct
keyword (the other answers don't exploit this fact and end up doing more work).
If you want to total number of different profile_id in each, where given values that appear in both table are considered different values, use this:
select sum(count) from (
select count(distinct profile_id) as count
from userprofile_...
union all
select count(distinct profile_id)
from productions_...
) x
This query will out-perform all other answers, because the database can efficiently count distinct values within a table much faster than from the unioned list. The sum()
simply adds the two counts together.
If you want a total count for all records, then you would do this:
SELECT COUNT(*)
FROM
(
select distinct profile_id
from userprofile_...
union all
select distinct profile_id
from productions_...
) x
you should use Union All
if there are equals rows in both tables, because Union makes a distinct
select count(*) from
(select distinct profile_id from userprofile_...
union ALL
select distinct profile_id from productions_...) x
In this case, if you got a same Profile_Id
in both tables (id is probably a number, so it's possible), then if you use Union
, if you got Id = 1
in both tables
, you will lost one row (it will appear one time instead of two)
As omg ponies has already pointed out that there is no use of using distinct with UNION, you can use UNION ALL in your case.....
SELECT COUNT(*)
FROM
(
select distinct profile_id from userprofile_...
union all
select distinct profile_id from productions_...
) AS t1