Структура таблиц MySQL

0

У меня есть база данных MySQL со следующей структурой таблицы:

TransactionType: Transaction_Amount, Transaction_ID, Transaction_Form
Транзакция: Transaction_ID, временная метка
Покупка: Transaction_ID, Item_ID
Элементы: Item_ID, Client_ID

Это действительно вопрос из двух частей (пожалуйста, дайте мне знать, если я должен опубликовать их как два отдельных вопроса)

1) TransactionType.Transaction_Form - это, по существу, столбец, определяющий, была ли транзакция денежной или кредитной. Есть ли способ объединить эти два запроса?

SELECT SUM(Transaction_Amount) 
FROM Transaction_Type WHERE Transaction_Form = 'cash'

и

SELECT SUM(Transaction_Amount) 
FROM Transaction_Type WHERE Transaction_Form = 'credit'

2) Мне нужно выбрать эти два параметра transaction_amount на основе используемого client_id.

Единственный способ, которым я могу это сделать, это что-то вроде:

SELECT Transaction_Amount FROM Transaction_Type 
JOIN Transaction ON Transaction_Type.Transaction_ID=Transaction.Transaction_ID
JOIN Purchase ON Transaction.Transaction_ID = Purchase.Transaction_ID
JOIN Items ON Purchase.Item_ID = Item.Item_ID
WHERE Items.Client_ID = $clientId

Что, очевидно, не все так красиво...

Нужно ли добавить столбец client_id в транзакцию? Было бы лишним?

-Спасибо

Теги:
database-design

2 ответа

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

Часть 1:

Использование:

SELECT SUM(tt.transaction_amount)
  FROM TRANSACTION_TYPE tt
 WHERE tt.transaction_form IN ('cash', 'credit')

... если вы хотите, чтобы transaction_amount использовался как для комбинированных. Если вы хотите, чтобы они были разделены, используйте:

  SELECT tt.transaction_form,
         SUM(tt.transaction_amount)
    FROM TRANSACTION_TYPE tt
   WHERE tt.transaction_form IN ('cash', 'credit')
GROUP BY tt.transaction_form

Часть 2:

Использование:

SELECT tt.transaction_amount
  FROM TRANSACTION_TYPE tt
  JOIN PURCHASE p ON p.transaction_id = tt.transaction_id
  JOIN ITEMS i ON i.item_id = p.item_id
 WHERE i.client_id = ?
2

1:

SELECT transaction_form, SUM(transaction_amount) 
FROM transaction_type 
GROUP BY transaction_form
  • 0
    Это перечислит суммы для всех transaction_form , а не только для наличных и кредитов.
  • 0
    Это правда, я предположил, что это будет необходимо, но, поскольку он явно сказал «объединить эти два запроса», ваш ответ является более точным.
Показать ещё 1 комментарий

Ещё вопросы

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