2017-08-29 76 views
1

我有五個表:笨:加入超過3個表

  1. Bill:無(PK),日期,時間,總
  2. BillOrderRelation:無(FK),ORDER_ID(FK)
  3. Order:ORDER_ID(PK),menu_id(FK),數量,總
  4. Menu:menu_id(PK),CATEGORY_ID(FK),MENU_NAME,股票,價格
  5. Category:CATEGORY_ID(PK),CATEGORY_NAME,顏色

就我而言,我必須檢索哪一個菜單在一天範圍內具有最高的銷售額,7天範圍和30天範圍內。

我已經成功檢索這些信息,但我認爲它太複雜。首先,我必須檢索Bill的日期,然後在BillOrderRelation中查找訂單,然後找到Menu,並找到Category類別。它包含了很多查詢和複雜的方法來完成相同菜單的總結。

我的問題是,是否有可能在一個查詢中查詢所有這些表以檢索menu.menu_name,order.quantities,order.total,category.name,並且它包含了檢索到的相同菜單的總和?

我已經成功進行查詢三個表,而不使用時間範圍,這樣的..

SELECT 
    menu.menu_name as top_item, 
    SUM(order.quantities) AS count_sold, 
    SUM(order.total) AS amount, 
    category.nama AS categories 
FROM 
    menu, order, category 
WHERE 
    menu.mennu_id = bill.menu_id 
    AND category.category_id = menu.category_id 
GROUP BY 
    bill.menu_id, menu.menu_name, category.category_name 
ORDER BY 
    count_sold DESC 

是否有以上的情況下,任何取巧的方法?

+0

[踢壞的習慣:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using -old-style-joins.aspx) - 在ANSI-** 92 ** SQL標準(** 25)中,舊式*逗號分隔的表*樣式列表已替換爲* proper * ANSI'JOIN'語法年**前),其使用是不鼓勵 –

+0

啊謝謝你告訴我,我不會再使用這些語法.. –

回答

1

更新PostgreSQL的

我相信你想是這樣的:

SELECT 
    m.menu_name AS top_item 
    , c.name AS category 
    , SUM(o.quantities) AS sum_quantity 
    , SUM(o.total) AS sum_total 
FROM 
    menu m 
JOIN 
    category c 
    ON c.category_id=m.category_id 
JOIN 
    order o 
    ON o.menu_id=m.menu_id 
JOIN 
    billorderrelation bor 
    ON bor.order_id=o.order_id 
JOIN 
    bill b 
    ON b.no=bor.no 
WHERE 
    b.date >= (CURRENT_DATE - INTERVAL '7 days') 
GROUP BY 
    m.menu_id 
ORDER BY 
    sum_quantity DESC 
; 

CURRENT_DATE可以讓你獲得當前的日期(根據您的數據庫中指定的時區)。閱讀更多: https://www.postgresql.org/docs/8.2/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT

+0

啊,我明白了。答案是有可能加入這些表,但我使用postgresql和bill中的日期是字符串,是否可以使用像dat_sub和curdate這樣的東西? –

+0

你能提供一個賬單日期字符串值的例子嗎? – neuromatter

+0

@MagnificentGlitch如果將查詢封裝在SQL視圖中,並且在您的代碼中,您將像「SELECT * FROM view_order_report'一樣訪問,您將獲得所有字段(例如,top_item,category,sum_quantity,sum_total) – JMS786