MySQL a query from two tables










1















I have 2 tables created with SQL. The first one has an unique id and a name of a provider. The second one has a product name, the amount of that product and the id of the provider.

I need a query that gives me the name of each provider and the total sum of the product amount that they have.



Ex:



CREATE TABLE IF NOT EXISTS provider 
(id int unique auto_increment primary key,
name char(50));

CREATE TABLE IF NOT EXISTS product
(id int unique auto_increment primary key,
name char(30),
provider_id int NOT NULL,
amount int NOT NULL);

Provider: (id, name)
1 Mike
2 Peter
3 John

Product: (id, name, provider_id, amount)
1 RedCar 1 100
2 BlueCar 1 50
3 RedCar 3 35
4 OrangeCar 2 500
5 GreenCar 3 250

Query:
Mike 150
Peter 500
John 285









share|improve this question
























  • try this stackoverflow.com/questions/10687773/…

    – unos baghaii
    Nov 13 '18 at 13:10















1















I have 2 tables created with SQL. The first one has an unique id and a name of a provider. The second one has a product name, the amount of that product and the id of the provider.

I need a query that gives me the name of each provider and the total sum of the product amount that they have.



Ex:



CREATE TABLE IF NOT EXISTS provider 
(id int unique auto_increment primary key,
name char(50));

CREATE TABLE IF NOT EXISTS product
(id int unique auto_increment primary key,
name char(30),
provider_id int NOT NULL,
amount int NOT NULL);

Provider: (id, name)
1 Mike
2 Peter
3 John

Product: (id, name, provider_id, amount)
1 RedCar 1 100
2 BlueCar 1 50
3 RedCar 3 35
4 OrangeCar 2 500
5 GreenCar 3 250

Query:
Mike 150
Peter 500
John 285









share|improve this question
























  • try this stackoverflow.com/questions/10687773/…

    – unos baghaii
    Nov 13 '18 at 13:10













1












1








1


1






I have 2 tables created with SQL. The first one has an unique id and a name of a provider. The second one has a product name, the amount of that product and the id of the provider.

I need a query that gives me the name of each provider and the total sum of the product amount that they have.



Ex:



CREATE TABLE IF NOT EXISTS provider 
(id int unique auto_increment primary key,
name char(50));

CREATE TABLE IF NOT EXISTS product
(id int unique auto_increment primary key,
name char(30),
provider_id int NOT NULL,
amount int NOT NULL);

Provider: (id, name)
1 Mike
2 Peter
3 John

Product: (id, name, provider_id, amount)
1 RedCar 1 100
2 BlueCar 1 50
3 RedCar 3 35
4 OrangeCar 2 500
5 GreenCar 3 250

Query:
Mike 150
Peter 500
John 285









share|improve this question
















I have 2 tables created with SQL. The first one has an unique id and a name of a provider. The second one has a product name, the amount of that product and the id of the provider.

I need a query that gives me the name of each provider and the total sum of the product amount that they have.



Ex:



CREATE TABLE IF NOT EXISTS provider 
(id int unique auto_increment primary key,
name char(50));

CREATE TABLE IF NOT EXISTS product
(id int unique auto_increment primary key,
name char(30),
provider_id int NOT NULL,
amount int NOT NULL);

Provider: (id, name)
1 Mike
2 Peter
3 John

Product: (id, name, provider_id, amount)
1 RedCar 1 100
2 BlueCar 1 50
3 RedCar 3 35
4 OrangeCar 2 500
5 GreenCar 3 250

Query:
Mike 150
Peter 500
John 285






mysql






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 13 '18 at 13:27









Madhur Bhaiya

19.6k62236




19.6k62236










asked Nov 13 '18 at 13:01









Cristian PacurarCristian Pacurar

84




84












  • try this stackoverflow.com/questions/10687773/…

    – unos baghaii
    Nov 13 '18 at 13:10

















  • try this stackoverflow.com/questions/10687773/…

    – unos baghaii
    Nov 13 '18 at 13:10
















try this stackoverflow.com/questions/10687773/…

– unos baghaii
Nov 13 '18 at 13:10





try this stackoverflow.com/questions/10687773/…

– unos baghaii
Nov 13 '18 at 13:10












2 Answers
2






active

oldest

votes


















0














You need a simple LEFT JOIN with GROUP BY aggregation. LEFT JOIN will ensure to account for a provider even if he/she does not have any product.



SUM() function is used to calculate the sum of amount for a specific provider. We can use COALESCE() function to handle NULL values. SUM() will return NULL for the cases when there is no product for a provider.



SELECT 
pvd.id,
pvd.name,
COALESCE(SUM(pdt.amount),0) AS total_amount
FROM Provider AS pvd
LEFT JOIN Product AS pdt
ON pdt.provider_id = pvd.id
GROUP BY pvd.id, pvd.name


P.S. It is advisable to use Aliasing in case of multi-table queries, for code clarity (readability) and avoiding ambiguous behaviour.



P.P.S. If you don't want to list the provider with no products; you can change LEFT JOIN to INNER JOIN, and get rid of the COALESCE() function usage as well.






share|improve this answer






























    0














    This is the SQL query that gives result as per you want.



    SELECT pr.name,SUM(p.amount) as total_amount FROM `provider` pr LEFT JOIN `product` p ON p.provider_id = pr.id where 1 GROUP BY pr.id





    share|improve this answer






















      Your Answer






      StackExchange.ifUsing("editor", function ()
      StackExchange.using("externalEditor", function ()
      StackExchange.using("snippets", function ()
      StackExchange.snippets.init();
      );
      );
      , "code-snippets");

      StackExchange.ready(function()
      var channelOptions =
      tags: "".split(" "),
      id: "1"
      ;
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function()
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled)
      StackExchange.using("snippets", function()
      createEditor();
      );

      else
      createEditor();

      );

      function createEditor()
      StackExchange.prepareEditor(
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader:
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      ,
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      );



      );













      draft saved

      draft discarded


















      StackExchange.ready(
      function ()
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53281588%2fmysql-a-query-from-two-tables%23new-answer', 'question_page');

      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      0














      You need a simple LEFT JOIN with GROUP BY aggregation. LEFT JOIN will ensure to account for a provider even if he/she does not have any product.



      SUM() function is used to calculate the sum of amount for a specific provider. We can use COALESCE() function to handle NULL values. SUM() will return NULL for the cases when there is no product for a provider.



      SELECT 
      pvd.id,
      pvd.name,
      COALESCE(SUM(pdt.amount),0) AS total_amount
      FROM Provider AS pvd
      LEFT JOIN Product AS pdt
      ON pdt.provider_id = pvd.id
      GROUP BY pvd.id, pvd.name


      P.S. It is advisable to use Aliasing in case of multi-table queries, for code clarity (readability) and avoiding ambiguous behaviour.



      P.P.S. If you don't want to list the provider with no products; you can change LEFT JOIN to INNER JOIN, and get rid of the COALESCE() function usage as well.






      share|improve this answer



























        0














        You need a simple LEFT JOIN with GROUP BY aggregation. LEFT JOIN will ensure to account for a provider even if he/she does not have any product.



        SUM() function is used to calculate the sum of amount for a specific provider. We can use COALESCE() function to handle NULL values. SUM() will return NULL for the cases when there is no product for a provider.



        SELECT 
        pvd.id,
        pvd.name,
        COALESCE(SUM(pdt.amount),0) AS total_amount
        FROM Provider AS pvd
        LEFT JOIN Product AS pdt
        ON pdt.provider_id = pvd.id
        GROUP BY pvd.id, pvd.name


        P.S. It is advisable to use Aliasing in case of multi-table queries, for code clarity (readability) and avoiding ambiguous behaviour.



        P.P.S. If you don't want to list the provider with no products; you can change LEFT JOIN to INNER JOIN, and get rid of the COALESCE() function usage as well.






        share|improve this answer

























          0












          0








          0







          You need a simple LEFT JOIN with GROUP BY aggregation. LEFT JOIN will ensure to account for a provider even if he/she does not have any product.



          SUM() function is used to calculate the sum of amount for a specific provider. We can use COALESCE() function to handle NULL values. SUM() will return NULL for the cases when there is no product for a provider.



          SELECT 
          pvd.id,
          pvd.name,
          COALESCE(SUM(pdt.amount),0) AS total_amount
          FROM Provider AS pvd
          LEFT JOIN Product AS pdt
          ON pdt.provider_id = pvd.id
          GROUP BY pvd.id, pvd.name


          P.S. It is advisable to use Aliasing in case of multi-table queries, for code clarity (readability) and avoiding ambiguous behaviour.



          P.P.S. If you don't want to list the provider with no products; you can change LEFT JOIN to INNER JOIN, and get rid of the COALESCE() function usage as well.






          share|improve this answer













          You need a simple LEFT JOIN with GROUP BY aggregation. LEFT JOIN will ensure to account for a provider even if he/she does not have any product.



          SUM() function is used to calculate the sum of amount for a specific provider. We can use COALESCE() function to handle NULL values. SUM() will return NULL for the cases when there is no product for a provider.



          SELECT 
          pvd.id,
          pvd.name,
          COALESCE(SUM(pdt.amount),0) AS total_amount
          FROM Provider AS pvd
          LEFT JOIN Product AS pdt
          ON pdt.provider_id = pvd.id
          GROUP BY pvd.id, pvd.name


          P.S. It is advisable to use Aliasing in case of multi-table queries, for code clarity (readability) and avoiding ambiguous behaviour.



          P.P.S. If you don't want to list the provider with no products; you can change LEFT JOIN to INNER JOIN, and get rid of the COALESCE() function usage as well.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 13 '18 at 13:29









          Madhur BhaiyaMadhur Bhaiya

          19.6k62236




          19.6k62236























              0














              This is the SQL query that gives result as per you want.



              SELECT pr.name,SUM(p.amount) as total_amount FROM `provider` pr LEFT JOIN `product` p ON p.provider_id = pr.id where 1 GROUP BY pr.id





              share|improve this answer



























                0














                This is the SQL query that gives result as per you want.



                SELECT pr.name,SUM(p.amount) as total_amount FROM `provider` pr LEFT JOIN `product` p ON p.provider_id = pr.id where 1 GROUP BY pr.id





                share|improve this answer

























                  0












                  0








                  0







                  This is the SQL query that gives result as per you want.



                  SELECT pr.name,SUM(p.amount) as total_amount FROM `provider` pr LEFT JOIN `product` p ON p.provider_id = pr.id where 1 GROUP BY pr.id





                  share|improve this answer













                  This is the SQL query that gives result as per you want.



                  SELECT pr.name,SUM(p.amount) as total_amount FROM `provider` pr LEFT JOIN `product` p ON p.provider_id = pr.id where 1 GROUP BY pr.id






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 13 '18 at 13:44









                  Harry baldaniyaHarry baldaniya

                  115111




                  115111



























                      draft saved

                      draft discarded
















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid


                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.

                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function ()
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53281588%2fmysql-a-query-from-two-tables%23new-answer', 'question_page');

                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

                      Edmonton

                      Crossroads (UK TV series)