2 COUNT запрашивает умножение результатов

0

Я пытаюсь выполнить два оператора 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

  • 0
    Возможный дубликат Как получить несколько счетов с одним запросом SQL?
  • 0
    Что вы хотите посчитать во втором счете (...)?
Показать ещё 7 комментариев
Теги:

2 ответа

1
Лучший ответ

Из описания я понял, что вы получаете перекрестный продукт, поэтому вы получаете неправильный номер для 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';
  • 0
    Блестяще, спасибо!
0
 "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'";
  • 0
    Попробуйте использовать отличные на втором счете
  • 0
    Я уже попробовал это, и я получаю неправильные значения. Все для второго COUNT имеет значение 1
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню