Cara mencari Untung untuk Kategori

Proyek saya adalah tentang toko perhiasan dan saya mencoba mencari keuntungan dari setiap kategori produk. Biarkan saya lebih spesifik

Saya memiliki 3 tabel yang memberi saya info:

PENJUALAN (id penjualan, id produk, kuantitas, harga)

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

RETURN(salesid,produkid,tanggal,jumlah,harga)

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

PENGADAAN(id pengadaan,id produk,kuantitas,harga)

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

kategori_produk(kategoriid,kategori)

categoryid  category
1           Gold
2           Silver
.
5           Platin

produk(ID Produk,id kategori)

Productid  categoryid
13001      1
13002      3
.
.
13010      5

Keuntungan yang diberikan dari jenis ini:

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

Dan sekarang inilah masalahnya.. Saya sudah sampai sejauh ini

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 

[maaf untuk penyelarasan saya baru mengenal situs ini tidak tahu cara menyalin kode tempel dengan baik (: D)] apa pun ketika saya melakukan ini, keadaannya seperti

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

tidak tahu di mana masalahnya...saya membuat banyak perubahan dan peralihan tetapi tidak ada yang muncul...saran apa pun akan sangat membantu. Terima kasih sebelumnya


person user2432398    schedule 02.06.2013    source sumber


Jawaban (1)


Awalnya sepertinya rumus keuntungan Anda memiliki koma tambahan di dalamnya. ini

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

seharusnya ini

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

Beberapa masalah lagi dengan kueri ini

  • Tepat sebelum klausa Where, setelah Anda bergabung dengan subkueri biaya, Anda menambahkan tabel produk dan pengadaan tetapi tidak menggabungkannya. Ini akan menyebabkan gabungan kartesius yang akan membuang hasil Anda.
  • Di klausa Where Anda tidak menentukan bidang tanggal tabel mana yang ingin Anda gunakan. AND YEAR(date) = 2013 seharusnya e.date atau f.date. Itu seharusnya memberi Anda kesalahan jika Anda mencoba menjalankannya.
  • WHERE MONTH(f.date) = MONTH(e.date) tabel manakah yang dimaksud dengan f.date? Anda tidak memberikan alias f ke tabel mana pun.
  • Anda bergabung dalam pengadaan dan menggunakan bidang tanggal untuk memfilter hasil berdasarkan bulan, namun tidak ada pendapatan, pengembalian, dan total subkueri biaya yang memperhitungkan tanggal. Ini akan merusak hasil Anda.
person Jerry    schedule 02.06.2013