Saya cuba menulis pertanyaan MySQL untuk mengira baris yang berbeza dengan ketara daripada baris yang paling biasa untuk setiap produk dan melaporkan perbezaan peratusan, di mana di bawah 100% harga adalah di bawah harga purata untuk produk tersebut dan melebihi 100% lebih tinggi . Harga kurang daripada 1 sisihan piawai daripada min diabaikan.
Sampel data:
_rowid | _Cap Masa | Kod | fk_product_id | fk_po_id | Kos |
---|---|---|---|---|---|
5952 | 2021-01-10 10:19:01 | 00805 | 1367 | 543 | 0.850 |
9403 | 2022-05-23 14:54:34 | 00805 | 1367 | 2942 | 0.850 |
41595 | 2022-11-23 11:20:26 | 00805 | 1367 | 3391 | 1.350 |
39635 | 2022-01-18 12:49:32 | Air 1 | 344 | 3153 | 0.140 |
40134 | 2022-04-06 22:39:34 | Air 1 | 344 | 2747 | 0.190 |
41676 | 2022-12-09 16:28:28 | Air 1 | 344 | 3398 | 0.140 |
39634 | 2022-01-18 12:49:31 | gr309203 344400 | 1024 | 3154 | 0.770 |
35634 | 2021-03-03 15:23:23 | gr309203 344400 | 1024 | 3203 | 0.790 |
41264 | 2022-11-16 11:41:44 | gr309203 344400 | 1024 | 3357 | 0.970 |
SELECT code, fk_product_id, cost, cost/ (SELECT avg(cost) FROM po_line aa WHERE aa.code = code) AS percent FROM po_line WHERE (SELECT STDDEV(cost) FROM po_line ss WHERE ss.code = code)>1;
Ini tidak akan mengembalikan sebarang baris, tetapi tiga baris (satu untuk setiap produk) akan muncul dalam laporan.
Hasil yang diharapkan ialah:
Kod | fk_product_id | Kos | Peratusan |
---|---|---|---|
00805 | 1367 | 1.350 | 133 |
Air 1 | 344 | 0.190 | 121 |
gr309203 344400 | 1024 | 0.970 | 115 |
Pertanyaan ini menunjukkan cara menggunakan fungsi tetingkap untuk mengira bilangan sisihan piawai dan kos sebagai peratusan kos purata bagi setiap kod yang diberikan.
Hasil:
(Sila ambil perhatian bahawa fungsi tetingkap memerlukan MySQL 8.0).
Pertanyaan ini hanya menunjukkan kepada anda cara pengiraan dilakukan. Untuk mendapatkan hasil yang anda inginkan: