2010-07-07 4 views
0

У меня есть таблица продуктов, с полями товара, категории и стоимости, типа varchar, varchar и decimal.группировка общих результатов в sql

У меня тогда есть таблица продаж, с клиентом полей, именем продукта, количеством, стоимостью и saledate, типа varchar, varchar, int, decimal и date.

Я хочу показать все продукты, проданные за месяц, скажем, в текущем месяце.

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

В таблице продаж стоимость каждой записи продаж уже умножается на количество.

Так, например, если бы было куплено 5 пива, оно было бы возвращено в виде одной строки, показывающей имя как пиво, quanity как 5, и стоило бы столько же.

мне нужно что-то вроде говорят:

Select product, cost from sales, WHERE sales.product=products.name 
AND category='food' AND WHERE month(date_field) = month(getdate()) 

Это должно показать все продажи для определенной категории продукта за текущий месяц, но есть простой способ «группы» продукты вместе?

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

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

У меня есть не знаю, куда идти, насколько я получил ...

+0

Проблема может быть глубже, чем запрос для выбора продаж продукта. Возможно, ваша структура таблицы может быть улучшена. Пожалуйста, можете отредактировать свой вопрос и добавить вывод из 'CREATE TABLE' для каждой из ваших таблиц.Вы указываете таблицу 'закупок', но это не отображается в вашем запросе - как это относится к двум другим таблицам? – Mike

+0

Я описал структуру таблицы в начале моего вопроса, хотя? Я удалил таблицу покупок из моего вопроса, так как это не актуально. Я просто пытаюсь избежать ненужного вопроса. – 2010-07-07 08:24:55

+0

Из вашего описания таблиц и примера запроса выглядит так, как будто вы связали таблицы через столбец VARCHAR 'product'. Если вы измените имя 'product' в таблице' products', то связь будет разорваться, если вы не обновите 'product_name' в таблице' sales'. Вы * могли бы * фактически присоединиться к таблицам, используя первичный ключ, но это не ясно из вашего вопроса. Моя точка зрения заключалась в том, что с небольшой дополнительной информацией вы бы помогли респондентам предоставить лучшее решение. – Mike

ответ

0

Этот вопрос выглядит ужасно знакомым ...

Ответ - оператор SQL GROUP BY.

SELECT product, SUM(quantity) FROM sales s, products p WHERE product=p.name AND category='food' AND month(date_field)=month(getdate()) GROUP BY product 

SUM (количество), указанное выше, будет подсчитывать все единицы, проданные определенного продукта за данный месяц.

+0

Не думаю, что я задал аналогичный вопрос раньше, мой другой вопрос касался диапазонов дат? – 2010-07-07 08:27:19

+0

в вашем решении, стоимость не возвращается вообще? Можно ли вернуть стоимость на основе количества? – 2010-07-07 08:29:18

+0

Просто отметив, что я только что ответил на вопрос о шаге перед этим. Никакого вреда. – Borealid

0
SELECT productname, cost, COUNT(*) AS cnt 
FROM sales LEFT JOIN products ON sales.product = products.productname 
WHERE category='food' AND month(date_field) = month(getdate()) 
GROUP BY productname 
1

Вы ищете что-то вроде

Select product, cost from sales,products WHERE sales.product=products.name 
AND category='food' AND month(date_field) = month(getdate()) 

Чтобы получить список элементов, связанных как вы предлагаете в зависимости от категории в таблицах продукции.

Чтобы получить сводку по категориям вам нужно что-то вроде:

Select category,SUM(Sales.Quantity),SUM(Sales.cost) from 
sales,products WHERE sales.product=products.name 
AND category='food' AND month(date_field) = month(getdate()) group by category 

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

+0

Привет Элементаль, даже попробовав решение выше, я не могу заставить его работать. В основном я получаю ошибку, что стоимость поля неоднозначна и что FUNCTION mytable.getdate не существует. Я считаю, что я неоднозначно, но не смог пройти через ошибку функции. – 2010-07-07 11:04:27

+0

Действительно - однако существуют соответствующие функции mysql, которые обслуживают вас в позиции месяца и getdate в вашем примере. Я предлагаю вам ознакомиться с документами скалярных функций относительно дат. – Elemental

+0

У меня уже работал getdate, это похоже на запрос, который вы опубликовали. Я также не могу пройти мимо ошибки двусмысленности, следует ли использовать sales.cost от продаж AND products.cost от продуктов, а не только от продаж, продуктов? – 2010-07-07 19:40:06

Смежные вопросы