Note that there are some explanatory texts on larger screens.

plurals
  1. POhow to make a simple subquery in mysql
    primarykey
    data
    text
    <p>I have a table schema like this</p> <p><strong>mysql> desc material_out;</strong></p> <pre>`enter code here` +-------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+-------+ | id | int(11) | NO | | 0 | | | barcode | varchar(20) | NO | | NULL | | | name | varchar(100) | NO | | NULL | | | qty | double | YES | | NULL | | | unit | varchar(20) | YES | | NULL | | | num_letter | varchar(30) | YES | | NULL | | | date | date | YES | | NULL | | | destination | varchar(50) | YES | | NULL | | +-------------+--------------+------+-----+---------+-------+ 8 rows in set (0.00 sec) </pre> <p><strong>mysql> desc material_in;</strong></p> <pre>`enter code here` +-------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+-------+ | id | int(11) | NO | | 0 | | | barcode | varchar(20) | NO | | NULL | | | name | varchar(100) | NO | | NULL | | | qty | double | YES | | NULL | | | unit | varchar(20) | YES | | NULL | | | num_letter | varchar(30) | YES | | NULL | | | date | date | YES | | NULL | | | destination | varchar(50) | YES | | NULL | | +-------------+--------------+------+-----+---------+-------+ 8 rows in set (0.00 sec) </pre> <p><strong>mysql> desc goods;</strong></p> <pre>`enter code here` +-------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+-------+ | id | int(11) | NO | | 0 | | | barcode | varchar(20) | NO | | NULL | | | name | varchar(100) | NO | | NULL | | | unit | varchar(20) | YES | | NULL | | | category | varchar(25) | YES | | NULL | | | first_stok | double ) | YES | | NULL | | +-------------+--------------+------+-----+---------+-------+ 6 rows in set (0.00 sec) </pre> <p>In table material_out I have data of 10,000 rows. and has as many as 350 types of barcodes. In table material_in I have data around 15,000 rows. and has as many as 200 types of barcodes.</p> <p>but i have a problem when doing a query. takes a long time probably about 3 hours.</p> <p>I think this is not efficient when you want to print a report.</p> <p><strong>my query like this.</strong></p> <pre><code>SELECT br.barcode, out.total_out, in.total_in, out.total_out - in.total_in AS RESULT FROM (SELECT barcode, name, first_stok, unit FROM goods WHERE category=1) AS br LEFT JOIN (SELECT (SELECT sum(qty) FROM material_out WHERE date &gt;= '2013-08-15' AND tanggal &lt;='2013-08-20' AND barcode=a.barcode) AS total_out FROM material_out a GROUP BY a.barcode) AS OUT ON OUT.barcode=br.barcode LEFT JOIN (SELECT (SELECT sum(qty) FROM material_in WHERE date &gt;= '2013-08-15' AND tanggal &lt;='2013-08-20' AND barcode=a.barcode) AS total_in FROM material_in a GROUP BY a.barcode) AS IN ON IN.barcode=br.barcode </code></pre> <p>edited bro.. new query from realitygone.</p> <pre><code>&lt;pre&gt; mysql&gt; SELECT tNEW.barcode, -&gt; tNEW.total_out, tNEW.total_in, tNEW.result, -&gt; tOLD.total_out AS total_out_old, tOLD.total_in AS total_in_old, tNEW.total_in + tOLD.total_in - tNEW.total_out - tOLD.total_out as sum_total -&gt; FROM ( -&gt; SELECT goods.barcode, -&gt; SUM(tOUT.qty) AS total_out, -&gt; SUM(tIN.qty) AS total_in, -&gt; SUM(tIN.qty) - SUM(tOUT.qty) AS result -&gt; FROM goods -&gt; LEFT JOIN material_out AS tOUT ON tOUT.barcode=goods.barcode -&gt; LEFT JOIN material_in AS tIN ON tIN.kode=goods.barcode -&gt; WHERE goods.category=1 -&gt; AND tOUT.date BETWEEN '2013-05-01' AND '2013-08-31' -&gt; AND tIN.date BETWEEN '2013-05-1' AND '2013-08-31' -&gt; GROUP BY goods.barcode -&gt; ) AS tNEW -&gt; LEFT JOIN ( -&gt; SELECT goods.barcode, -&gt; SUM(tOUT.qty) AS total_out, -&gt; SUM(tIN.qty) AS total_in -&gt; FROM goods -&gt; LEFT JOIN material_out AS tOUT ON tOUT.barcode=goods.barcode -&gt; LEFT JOIN material_in AS tIN ON tIN.kode=goods.barcode -&gt; WHERE goods.category=1 -&gt; AND tOUT.date BETWEEN '2013-01-01' AND '2013-04-31' -&gt; AND tIN.date BETWEEN '2013-01-01' AND '2013-04-31' -&gt; GROUP BY goods.barcode -&gt; ) AS tOLD ON tOLD.barcode=tNEW.barcode; +-------------+-----------+----------+------------+---------------+-------------------+--------------------+ | barcode | total_out | total_in | result | total_out_old | total_in_old | sum_total | +-------------+-----------+----------+------------+---------------+-------------------+--------------------+ | CG003 | 2720 | 14400 | 11680 | 17588 | 92160 | 86252 | | CG009 | 144 | 720 | 576 | NULL | NULL | NULL | | CG010 | 596 | 1800 | 1204 | 1512 | 6048 | 5740 | | CG011 | 864 | 4320 | 3456 | 1156 | 3600 | 5900 | | CG012 | 1875 | 7560 | 5685 | 843 | 4680 | 9522 | | CG013 | 2520 | 7560 | 5040 | 2826 | 14400 | 16614 | | CG014 | 19320 | 314340 | 295020 | 39312 | 597312 | 853020 | | CG015 | 890 | 9750 | 8860 | 12003 | 183330 | 180187 | | CG017 | 24 | 102000 | 101976 | 26 | 420 | 102370 | | CG018 | 390000 | 273000 | -117000 | 1320000 | 1020000 | -417000 | | CG020 | 396 | 2170 | 1774 | 820 | 3656 | 4610 | | CG022 | 238 | 1200 | 962 | 330 | 800 | 1432 | | CG023 | 752 | 3600 | 2848 | 3585 | 21600 | 20863 | | CG024 | 21560 | 146068 | 124508 | 64095 | 361552.6000000002 | 421965.6000000002 | | CG025 | 14833 | 85992 | 71159 | 49049 | 230218.0000000009 | 252328.00000000093 | | CG026 | 172 | 4000 | 3828 | 766 | 1170 | 4232 | | CG028 | 126 | 1440 | 1314 | 41 | 660 | 1933 | | CG029 | 18 | 300 | 282 | 40 | 920 | 1162 | | CG030 | 50 | 720 | 670 | 50 | 780 | 1400 | | CHDRY001 | 10260 | 81000 | 70740 | 73440 | 936000 | 933300 | | CHDRY002 | 4071288 | 3477926 | -593362 | 9762598 | 8570238 | -1785722 | | CHDRY003 | 8880 | 4441 | -4439 | NULL | NULL | NULL | | CHDRY004 | 48960 | 238590 | 189630 | 119880 | 413850 | 483600 | | CHDRY005 | 144 | 144 | 0 | 256 | 256 | 0 | | CHDRY006 | 37440 | 211200 | 173760 | 164160 | 968000 | 977600 | | CHDRY007 | 237600 | 1679040 | 1441440 | 604890 | 4758600 | 5595150 | | CHDRY009 | 766080 | 2026160 | 1260080 | 698250 | 2151560 | 2713390 | | CHDRY010 | 3600 | 168000 | 164400 | 40800 | 1488000 | 1611600 | | CHDRY012 | 200 | 2700 | 2500 | 340 | 5600 | 7760 | | CHDRY013 | 4290 | 17600 | 13310 | 4290 | 21120 | 30140 | | CHDRY014 | 278300 | 643720 | 365420 | 466210 | 1243620 | 1142830 | | CHDRY015 | 78720 | 264100 | 185380 | 81840 | 367070 | 470610 | | CHDRY018 | 2431270 | 1987260 | -444010 | 4877450 | 4672689 | -648771 | | CHDRY022 | 1320 | 4840 | 3520 | 330 | 1650 | 4840 | | CHDRY023 | 200 | 110 | -90 | NULL | NULL | NULL | | CHDRY024 | 2000 | 4000 | 2000 | 100 | 100 | 2000 | | CHDRY025 | 1800 | 4000 | 2200 | NULL | NULL | NULL | | CHDRY026 | 850 | 850 | 0 | NULL | NULL | NULL | | CHDRY028 | 120 | 480 | 360 | NULL | NULL | NULL | | CHPRINT001 | 8000 | 222000 | 214000 | 13800 | 390000 | 590200 | | CHPRINT002 | 4000 | 10000 | 6000 | 4200 | 21000 | 22800 | | CHPRINT004 | 13600 | 324000 | 310400 | 14400 | 512000 | 808000 | | CHPRINT005 | 28800 | 136800 | 108000 | 35000 | 133000 | 206000 | | CHPRINT006 | 3100 | 93000 | 89900 | 5600 | 112000 | 196300 | | CHPRINT007 | 16800 | 69000 | 52200 | 2000 | 9000 | 59200 | ------------------------------------------------------------------------------------------------------------ &lt;/pre&gt; </code></pre> <p>hello guy, i have new problem. when i calculate field <code>tNEW.total_in + tOLD.total_in - tNEW.total_out - tOLD.total_out.</code> when meeting with the column contains null, then the result of the sum contains null. for example in barcode CHDRY025 barcode CHDRY003 barcode CHDRY028 barcode NWDRY004</p> <p>for admin or moderator, sorry if I break the rules. :-)</p> <p>====================== POST EDITED 30 September 2013 ======================================</p> <p>Hello RealityGone, I have used a query from you. the result is going well. but when I try to enter new data. I then re-query of your display. but the results are not in accordance with the entered data. for example, when I enter a query from you. The following results</p> <pre> +----------------------+-----------+----------+------------+---------------+-------------------+ | barcode | total_out | total_in | result | total_out_old | total_in_old | +----------------------+-----------+----------+------------+---------------+-------------------+ | TNWET021 | 6195 | 15000 | 8805 | 20085 | 46200 | | TNWET020 | 3420 | 7650 | 4230 | 4860 | 23925 | | TNWET019 | 8370 | 25200 | 16830 | 11610 | 47175 | | TNWET018 | 18690 | 44100 | 25410 | 13800 | 54150 | | TNWET017 | 1140 | 3750 | 2610 | 3690 | 16200 | | TNWET016 | 19500 | 56100 | 36600 | 31725 | 111300 | | TNWET015 | 5145 | 18150 | 13005 | 6510 | 23400 | | TNWET014 | 33300 | 65250 | 31950 | 96300 | 262500 | | TNWET013 | 1170 | 5625 | 4455 | 3690 | 13200 | | TNWET012 | 720 | 2700 | 1980 | 3870 | 13800 | | TNWET011 | 0 | 0 | 0 | 180 | 450 | | TNWET010 | 0 | 0 | 0 | 405 | 1125 | | TNWET009 | 0 | 0 | 0 | 0 | 0 | </pre> <p>when I do a manual summation and results like this.</p> <pre> mysql> select sum(qty) from material_in where barcode='TNWET021' and date BETWEEN '2013-05-01' AND '2013-08-31'; +-------------+ | sum(qty) | +-------------+ | 750 | +-------------+ 1 row in set (0.00 sec) mysql> select sum(qty) from material_in where barcode='TNWET020' and date BETWEEN '2013-05-01' AND '2013-08-31'; +-------------+ | sum(qty) | +-------------+ | 450 | +-------------+ 1 row in set (0.00 sec) </pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload