วิธีค้นหากำไรสำหรับหมวดหมู่

โปรเจ็กต์ของฉันเกี่ยวกับร้านขายเครื่องประดับ และฉันพยายามค้นหาผลกำไรจากสินค้าแต่ละประเภท ให้ฉันเจาะจงมากขึ้น

ฉันมี 3 ตารางที่ให้ข้อมูลแก่ฉัน:

ยอดขาย (ยอดขาย, หมายเลขผลิตภัณฑ์, ปริมาณ, ราคา)

salesid  productid   Quantity Price
11001    13001       4        5
11002    13002       6        10
11003    13003       5        16
.
.
11012    13012       7        15

ผลตอบแทน(ยอดขาย,หมายเลขผลิตภัณฑ์,วันที่,ปริมาณ,ราคา)

salesid  productid   Quantity Price
11003    13003       1        16
11007    13007       3        12
11008    13008       3        8

การจัดซื้อจัดจ้าง(รหัสการจัดซื้อ รหัสผลิตภัณฑ์ ปริมาณ ราคา)

procurementid  productid   Quantity Price
100001         13001       10       2
100002         13002       10       2
.
. 
100012         13012       10       2

product_category(หมวดหมู่ ID, หมวดหมู่)

categoryid  category
1           Gold
2           Silver
.
5           Platin

ผลิตภัณฑ์(Productid,categoryid)

Productid  categoryid
13001      1
13002      3
.
.
13010      5

กำไรจะได้รับจากประเภทนี้:

Profit=Quantity*Price(Sell)-Quantity*Price(Return)-Quantity*Price(Procurement)

และตอนนี้นี่คือปัญหา .. ฉันมาถึงจุดนี้แล้ว

SELECT categoryid,
       category,
       (coalesce(a.rev,0)- coalesce(b.ret,0),
                           coalesce(c.cost,0)) AS profit
FROM product category AS g
    JOIN product AS h ON g.categoryid = h.categoryid
    JOIN
      (SELECT categoryid,
              sum(quantity*price) AS rev
       FROM sales AS a,
            product AS b
       WHERE a.productid = b.productid
       GROUP BY categoryid) a
    LEFT OUTER JOIN
      (SELECT cartegoryid,
              sum(quantity*price) AS ret
       FROM RETURN AS a ,
                      product AS b
       WHERE a.productid = b.productid
       GROUP BY categoryid) b ON a.categoryid = b.categoryid
    LEFT OUTER JOIN
      (SELECT categoryid,
              sum(quantity*price) AS cost
       FROM procurement AS a,
            product AS b
       WHERE a.productid = b.productid
       GROUP BY categoryid) c ON a.categoryid = c.categoryid ,
    product AS d,
    procurement AS e
WHERE MONTH(f.date) = MONTH(e.date)
  AND YEAR(date) = 2013 

[ขออภัยสำหรับการจัดแนว ฉันยังใหม่กับไซต์ไม่ทราบวิธีคัดลอกโค้ดวางได้ดี (:D)] ไม่ว่าฉันจะทำเช่นนี้ก็ตาม มันจะอยู่ในสถานะเช่น

categoryid  category  profit
1           Gold      -100
2           Silver    -100
.
5           Platin    -100

ไม่รู้ว่าปัญหาอยู่ที่ไหน...ฉันทำการเปลี่ยนแปลงและสวิตช์มากมายแต่ไม่มีอะไรเกิดขึ้น...ข้อเสนอแนะใด ๆ จะเป็นประโยชน์มาก ขอบคุณใน advane


person user2432398    schedule 02.06.2013    source แหล่งที่มา


คำตอบ (1)


ในตอนแรกดูเหมือนว่าสูตรกำไรของคุณจะมีเครื่องหมายจุลภาคเพิ่มเติมอยู่ นี้

(coalesce(a.rev,0) - coalesce(b.ret,0),coalesce(c.cost,0)) as profit

ควรจะเป็นสิ่งนี้

coalesce(a.rev,0) - coalesce(b.ret,0) - coalesce(c.cost,0) AS profit

มีปัญหาเพิ่มเติมเล็กน้อยเกี่ยวกับข้อความค้นหานี้

  • ก่อนส่วนคำสั่ง Where หลังจากที่คุณเข้าร่วมแบบสอบถามย่อยต้นทุน คุณจะเพิ่มตารางผลิตภัณฑ์และการจัดซื้อแต่ไม่ต้องรวมตารางเหล่านั้น นี่จะทำให้เกิดการรวมคาร์ทีเซียนซึ่งจะทำให้ผลลัพธ์ของคุณเสียไป
  • ในส่วนคำสั่ง Where คุณไม่ได้ระบุฟิลด์วันที่ของตารางที่คุณต้องการใช้ AND YEAR(date) = 2013 ควรเป็น e.date หรือ f.date นั่นน่าจะทำให้คุณเกิดข้อผิดพลาดหากคุณพยายามเรียกใช้
  • WHERE MONTH(f.date) = MONTH(e.date) f.date อ้างถึงตารางใด? คุณไม่ได้กำหนดนามแฝงเป็น f ให้กับตารางใดๆ
  • คุณเข้าร่วมในการจัดซื้อและใช้ช่องวันที่เพื่อกรองผลลัพธ์ตามเดือน แต่ไม่มีผลรวมของรายได้ การคืนสินค้า และต้นทุนในการค้นหาย่อยที่คำนึงถึงวันที่ นี่จะทำให้ผลลัพธ์ของคุณเสียไป
person Jerry    schedule 02.06.2013