Как присоединиться к таблице несколько раз, чтобы получить счет каждого жанра в транзакции - PullRequest
0 голосов
/ 16 декабря 2018

Мои таблицы

ТАБЛИЦА ОПЕРАЦИЙ

        transaction_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        customer_id INT,
        inventory_id INT,
        kiosk_id INT,
        rental_out DATETIME,
        rental_proposal INT, 
        rental_due DATETIME,
        rental_cost FLOAT,
        rental_in DATETIME,
        rental_period INT,
        rental_past_due INT,
        late_fee INT

ИНВЕНТАРНЫЙ СТОЛ

    inventory_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    title_id INT,
    title_name VARCHAR(255),
    genre_id INT,
    genre_name VARCHAR(255),
    qty INT

Я пытаюсь найти способ создать запрос, которыйпозволяет инвентаризации из таблицы транзакций для создания подсчета жанра каждой транзакции.Мой запрос позволяет определить количество транслируемых жанров, но только по одному за раз.

SELECT COUNT(genre_id) 
FROM inventory 
INNER JOIN transactions 
ON inventory.title_id = transactions.inventory_id 
WHERE transactions.customer_id = 1 and inventory.genre_id = 1;

Я бы хотел найти способ присоединиться к таблице несколько раз, чтобы отобразить количество раз каждого жанра.был арендован, поскольку в настоящее время существуют жанры 1, 2, 3, 4, 5, 6

До сих пор я задавал эти запросы, но не вижу логического пути к решению.

SELECT COUNT(A.genre_id) as GENRE_A, COUNT(A.genre_id) as GENRE_B, COUNT(A.genre_id) as GENRE_C FROM inventory A 
INNER JOIN transactions D ON A.title_id = D.inventory_id 
INNER JOIN transactions E ON A.title_id = E.inventory_id 
INNER JOIN transactions F ON A.title_id = F.inventory_id 
WHERE A.genre_id = 1 AND A.genre_id = 2 and A.genre_id = 3;

SELECT COUNT(A.inventory_id), COUNT(B.inventory_id), COUNT(C.inventory_id) FROM transactions A, transactions B, transactions C
INNER JOIN inventory D ON A.inventory_id = D.title_id
INNER JOIN inventory E ON A.inventory_id = E.title_id
INNER JOIN inventory F ON A.inventory_id = F.title_id
WHERE A.genre_id = 1 AND B.genre_id = 2 and C.genre_id = 3;

Я пробовал несколько вариантов, некоторые из которых я удалил и не опубликовал, но, похоже, не могу понять.Есть ли решение?Любая помощь будет принята с благодарностью.Спасибо!

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Почему бы не поместить результаты в несколько строк?

SELECT genre_id, COUNT(*) 
FROM inventory i INNER JOIN
     transactions t
     ON i.title_id = t.inventory_id 
WHERE t.customer_id = 1 and i.genre_id IN (1, 2, 3)
GROUP BY genre_id;
0 голосов
/ 16 декабря 2018

Просто используйте условную агрегацию.Требуется только 1 соединение.

Это будет считать транзакции для 3 жанров

SELECT
-- trans.customer_id,
COUNT(CASE WHEN inv.genre_id = 1 THEN trans.transaction_id END) AS genre1, 
COUNT(CASE WHEN inv.genre_id = 2 THEN trans.transaction_id END) AS genre2, 
COUNT(CASE WHEN inv.genre_id = 3 THEN trans.transaction_id END) AS genre3
FROM transactions trans
JOIN inventory inv ON inv.inventory_id = trans.inventory_id
WHERE inv.genre_id IN (1, 2, 3)
-- GROUP BY trans.customer_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...