Я пытаюсь выполнить два оператора COUNT через 3 соединения. Первый граф показывает правильное число, но второй, по некоторым причинам, умножает количество совпадений? Я проверил ссылку, которая была отмечена как дубликат, но в этом примере нет JOINS.
SELECT
COUNT(DISTINCT 'outlet_id') AS 'outlets',
'prod_name',
COUNT('purchased') AS 'vouchersleft'
FROM
'prod_outlets' AS 'po'
INNER JOIN 'bb_products' AS 'bbp' ON po.'product_id' = bbp.'prod_id'
INNER JOIN 'vouchers' AS 'v' ON v.'product_id' = bbp.'prod_id'
GROUP BY
bbp.'prod_id';
Он должен отображать 3 ветки и 5 ваучеров. Но он выводит 3 ветки и 15 ваучеров. Итак, второй COUNT умножается на первый, т.е. 3 x 5 = 15
Из описания я понял, что вы получаете перекрестный продукт, поэтому вы получаете неправильный номер для vouchersleft, что я предлагаю вам рассчитать ваш счет в предложении sun, а затем присоединиться к этому предложению с помощью вашего основного запроса, например
SELECT
COUNT(DISTINCT 'outlet_id') AS 'outlets',
'prod_name',
v.vouchersleft
FROM
'prod_outlets' AS 'po'
INNER JOIN 'bb_products' AS 'bbp' ON po.'product_id' = bbp.'prod_id'
INNER JOIN (
SELECT product_id, COUNT(*) vouchersleft
FROM vouchers
GROUP BY product_id
) AS 'v' ON v.'product_id' = bbp.'prod_id'
GROUP BY
bbp.'prod_id';
"SELECT COUNT(DISTINCT 'outlet_id') as 'outlets',
'prod_name',
COUNT(distinct 'purchased') as 'vouchersleft'
FROM 'prod_outlets' as 'po'
INNER JOIN 'bb_products' as 'bbp'
ON po.'product_id' = bbp.'prod_id'
INNER JOIN 'vouchers' as 'v'
ON v.'product_id' = bbp.'prod_id'
GROUP BY bbp.'prod_id'";