2013-04-02 2 views
0

Я думаю, что это трудно, чтобы найти мой Обработать на моей старшей должности, поэтому я сделать новый THEAD:MySQL запросов для конкретного года и категории

После решения этого так быстро, что я пытался играть немного вокруг, чтобы тренироваться на SQL а немного. Теперь я стараюсь сделать то же самое, что и раньше, вместо стран/регионов, я хочу, чтобы там были категории (пост раньше был о том, чтобы сделать запрос, где я могу увидеть количество продаж для США и остальной части мира для лет 2007 и 2008 в базе данных, теперь я пытаюсь сделать это с годами и категориями, которые начинаются с буквы «A»). Когда я пытался сделать такой запрос, я полностью потерял себя в нем. Oo . Мне кажется, мне нужно показать лица заранее: (над линией = TABLENAME)

  • Категория


  • Ca tegory

  • CategoryName

  • Продукты


  • PRODID

  • Категория
  • Название
  • Актер
  • Цена

  • OrderLines


  • OrderID

  • orderlineid
  • PRODID

  • заказы


  • OrderID

  • OrderDate
  • CustomerID
  • netamount

мой запрос до сих пор: (не абсолютное никакого смысла за ней: /)

SELECT year(orderdate) AS YEAR, 
     categoryname, 
     sum(custamot)Totsales FROM 
    (SELECT o.orders, sum(netamount) custamot, c.categoryname 
    FROM products o 
    JOIN categories c ON o.category = c.category 
    WHERE categoryname LIKE 'A%' 
    GROUP BY c.categoryname) iv 
GROUP BY YEAR(orderdate); 
+0

, что случилось в этом запросе ... – Rahul

+0

@Rahul Он ссылается OrderDate в его SELECT, но никогда не выбирает из или присоединяется к таблице заказов, поэтому он не будет работать только по этой причине. Также o.orders не имеет смысла, так как o - таблица продуктов, и у нее нет столбца, называемого порядками. –

ответ

0

Вы не должны подзапрос вообще , Просто присоедините все нужные вам таблицы и напишите подходящую группу by clause для вашей агрегации. Вы будете в конечном итоге с чем-то вроде:

SELECT YEAR(o.orderdate) AS YEAR, 
     c.Categoryname, 
     SUM(o.netamount) AS Totsales 
FROM orders o 
INNER JOIN orderlines ol ON ol.orderid = o.orderid 
INNER JOIN Products p ON p.ProdID = ol.Prodid 
INNER JOIN categories c ON c.Category = p.Category 
WHERE c.Categoryname LIKE 'A%' 
GROUP BY c.Categoryname, YEAR(o.orderdate); 
Смежные вопросы