0

指定された日付範囲内に販売されたアイテムタイプの降順リストを返そうとしています。

アイテムタイプの数を取得してカウントする方法は理解していますが、他のテーブルにリンクする方法に固執しています。私は自分の作業コードを、それを行う必要があると思う方法の疑似と一緒に置きます。どんな助けでも大歓迎です。

SELECT Item_Type, COUNT(*) as theAmount
FROM  myDB.Item

//LINK order_ID to item 
//WHERE order_ID includes Item_Type

//Link to session
//Find Ses_Date that order was made

GROUP BY Item_Type
ORDER BY theAmount desc
LIMIT 10

データをプルする必要のあるテーブルが3つあり、必要なフィールドが表示されます。

Item
PK: Item_ID
Row: Item_Type
FK: Order_ID

Order
PK: Order_ID
FK: Session_ID    

Session
PK: Ses_ID
Row: Ses_date 
4

3 に答える 3

1
SELECT   i.Item_Type, COUNT(i.Item_Type) as theAmount
FROM     Item AS i
JOIN     Order AS o ON o.order_ID = i.Order_ID 
JOIN     Session AS s ON s.Ses_ID = o.Session_ID 
WHERE    s.Ses_date between @date1 AND @date2 
GROUP BY i.Item_Type
ORDER BY theAmount DESC
LIMIT    10 
于 2012-11-10T15:37:35.930 に答える
1
SELECT Item_Type, COUNT(*) as theAmount, Session_date
FROM  Item
left outer join Order 
    on Item.Order_id = Order.Order_id
left outer join Session 
    on Order.Session_id = Session.Session_id
GROUP BY Item_Type
ORDER BY theAmount desc
LIMIT 10

上記のクエリで結果が得られます。

于 2012-11-10T15:38:13.567 に答える
0

この場合に使用する必要があるためLEFT JOIN、他のテーブルに一致するレコードがない場合、の値はItem_Typeゼロになります。

SELECT  a.Item_Type, COUNT(c.Ses_ID) theAmount
FROM    Item a
        LEFT JOIN   `Order` b
            ON  a.Order_ID = b.Order_ID
        LEFT JOIN   `Session` c
            ON b.Session_ID = c.Ses_ID
GROUP BY a.Item_Type
-- ORDER BY theAmount DESC
-- LIMIT 10
于 2012-11-10T15:34:28.577 に答える