Ограничение SQL-запроса определенными полями в таблице, не используемой запросом

0

У меня есть таблица продуктов с полями productname, category и cost типа varchar, varchar и double.

Затем у меня есть таблица продаж с полями productname, cost и saledate, типа varchar, double и date.

Наконец, у меня есть таблица покупок с покупкой, стоимостью и покупкой полей типа varchar, double и date.

Я хочу рассчитать количество продаж для определенных дат для определенных категорий.

У меня есть на данный момент этот запрос, чтобы показать ежемесячные итоги за год:

SELECT month(saledate), SUM(cost)
FROM sales
GROUP BY month(saledate)
UNION ALL
SELECT month(purchasedate), SUM(cost)
FROM purchases
GROUP BY month(purchasedate)

Как я могу ограничить его определенными категориями?

Определить определенные категории из продуктов, таких как еда и напитки, и включать только мои данные в эти категории?

  • 1
    Принятый ответ на вопрос: «Разве двойник действительно не подходит для денег?» «Очень, очень неподходящий. Используйте десятичную». ( stackoverflow.com/questions/316727/… )
Теги:

4 ответа

3
Лучший ответ
SELECT month(saledate), SUM(sales.cost)
FROM sales, products
WHERE sales.productname=products.productname
AND category='food'
GROUP BY month(saledate)
UNION ALL
SELECT month(purchasedate), SUM(purchases.cost)
FROM purchases, products
WHERE purchases.productname=products.productname
AND category='food'
GROUP BY month(purchasedate)

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

  • 0
    идеально ... просто быстрый вопрос, но делать ИЛИ в sql, было бы просто category = 'food' || 'пиво' || 'Дымит' ...?
  • 0
    Используйте слово ИЛИ. категория = 'еда' ИЛИ категория = 'пиво'.
Показать ещё 1 комментарий
1

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

иначе, используя HAVING

1

просто добавьте предложение WHERE, подобное этому:

[...] WHERE products.category = 'food' ИЛИ ​​prodcuts.category = 'drink' [...]

0

Я был бы склонен использовать подзапрос, а не соединение, и я думаю, что вы хотите его в обеих частях профсоюза. Но Borealid ответ довольно прост. Разница - это вопрос вкуса.

SELECT month(saledate),
       SUM(sales.cost)
    FROM sales, products
    WHERE EXISTS (SELECT *
                  FROM products
                  WHERE purchases.productname = products.productname AND
                        category              = 'food')
    GROUP BY month(saledate)
UNION ALL
SELECT month(purchasedate),
       SUM(purchases.cost)
    FROM purchases, products
    WHERE EXISTS (SELECT *
                      FROM products
                      WHERE purchases.productname = products.productname AND
                            category              = 'food')
    GROUP BY month(purchasedate)
  • 0
    Есть ли какое-то преимущество в выполнении подзапроса, или, как вы сказали, это только вопрос вкуса? Кроме того, глупый вопрос, но как бы я сделал AND в SQL, чтобы показать много категорий ... просто &&?
  • 0
    У вас на самом деле есть пример выполнения AND в ответе мистера Хупера. И нет, в этом случае нет реальной разницы между подзапросами и объединениями. В общем, нужно остерегаться взрывных соединений и неэффективных / ненужных подзапросов, которые являются различными демонами производительности, но здесь единственная разница - читаемость. Выберите тот, который вы считаете более легким для понимания.
Показать ещё 2 комментария

Ещё вопросы

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