Choosing a column that fulfills many conditions in different records












1















I have got table like this:



+----------+---------+
| Customer | Product |
+----------+---------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 2 | 2 |
+----------+---------+


I would like to select Customer who bought Products 1 AND 2 AND 3. So my query should return 1. How to achieve that?










share|improve this question























  • Can there be more types of product(s), other than 1,2,3 ?

    – Madhur Bhaiya
    Nov 16 '18 at 9:07











  • Question is completely simplified to my problem, but yes it can, and lets say I get products from many subqueries

    – jimmy winstone
    Nov 16 '18 at 9:13











  • So basically two cases are possible. Case 1: Get those customers which have purchased only 1,2,3 products and each one of them has been purchased atleast once. Case 2: Get those customers which have purchase each one of the 1,2,3 atleast (they may have purchased other products as well). Which case are you looking the solution for ?

    – Madhur Bhaiya
    Nov 16 '18 at 9:17











  • Definitely the second solution, I need those who have at least once bought each of these products.

    – jimmy winstone
    Nov 16 '18 at 9:21






  • 1





    Yes, your solution is really close to my problem, but instead of SUM(Product = 1) i put subqueries over there. Thank you :)

    – jimmy winstone
    Nov 16 '18 at 9:35
















1















I have got table like this:



+----------+---------+
| Customer | Product |
+----------+---------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 2 | 2 |
+----------+---------+


I would like to select Customer who bought Products 1 AND 2 AND 3. So my query should return 1. How to achieve that?










share|improve this question























  • Can there be more types of product(s), other than 1,2,3 ?

    – Madhur Bhaiya
    Nov 16 '18 at 9:07











  • Question is completely simplified to my problem, but yes it can, and lets say I get products from many subqueries

    – jimmy winstone
    Nov 16 '18 at 9:13











  • So basically two cases are possible. Case 1: Get those customers which have purchased only 1,2,3 products and each one of them has been purchased atleast once. Case 2: Get those customers which have purchase each one of the 1,2,3 atleast (they may have purchased other products as well). Which case are you looking the solution for ?

    – Madhur Bhaiya
    Nov 16 '18 at 9:17











  • Definitely the second solution, I need those who have at least once bought each of these products.

    – jimmy winstone
    Nov 16 '18 at 9:21






  • 1





    Yes, your solution is really close to my problem, but instead of SUM(Product = 1) i put subqueries over there. Thank you :)

    – jimmy winstone
    Nov 16 '18 at 9:35














1












1








1








I have got table like this:



+----------+---------+
| Customer | Product |
+----------+---------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 2 | 2 |
+----------+---------+


I would like to select Customer who bought Products 1 AND 2 AND 3. So my query should return 1. How to achieve that?










share|improve this question














I have got table like this:



+----------+---------+
| Customer | Product |
+----------+---------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 2 | 2 |
+----------+---------+


I would like to select Customer who bought Products 1 AND 2 AND 3. So my query should return 1. How to achieve that?







mysql select






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 16 '18 at 8:59









jimmy winstonejimmy winstone

387




387













  • Can there be more types of product(s), other than 1,2,3 ?

    – Madhur Bhaiya
    Nov 16 '18 at 9:07











  • Question is completely simplified to my problem, but yes it can, and lets say I get products from many subqueries

    – jimmy winstone
    Nov 16 '18 at 9:13











  • So basically two cases are possible. Case 1: Get those customers which have purchased only 1,2,3 products and each one of them has been purchased atleast once. Case 2: Get those customers which have purchase each one of the 1,2,3 atleast (they may have purchased other products as well). Which case are you looking the solution for ?

    – Madhur Bhaiya
    Nov 16 '18 at 9:17











  • Definitely the second solution, I need those who have at least once bought each of these products.

    – jimmy winstone
    Nov 16 '18 at 9:21






  • 1





    Yes, your solution is really close to my problem, but instead of SUM(Product = 1) i put subqueries over there. Thank you :)

    – jimmy winstone
    Nov 16 '18 at 9:35



















  • Can there be more types of product(s), other than 1,2,3 ?

    – Madhur Bhaiya
    Nov 16 '18 at 9:07











  • Question is completely simplified to my problem, but yes it can, and lets say I get products from many subqueries

    – jimmy winstone
    Nov 16 '18 at 9:13











  • So basically two cases are possible. Case 1: Get those customers which have purchased only 1,2,3 products and each one of them has been purchased atleast once. Case 2: Get those customers which have purchase each one of the 1,2,3 atleast (they may have purchased other products as well). Which case are you looking the solution for ?

    – Madhur Bhaiya
    Nov 16 '18 at 9:17











  • Definitely the second solution, I need those who have at least once bought each of these products.

    – jimmy winstone
    Nov 16 '18 at 9:21






  • 1





    Yes, your solution is really close to my problem, but instead of SUM(Product = 1) i put subqueries over there. Thank you :)

    – jimmy winstone
    Nov 16 '18 at 9:35

















Can there be more types of product(s), other than 1,2,3 ?

– Madhur Bhaiya
Nov 16 '18 at 9:07





Can there be more types of product(s), other than 1,2,3 ?

– Madhur Bhaiya
Nov 16 '18 at 9:07













Question is completely simplified to my problem, but yes it can, and lets say I get products from many subqueries

– jimmy winstone
Nov 16 '18 at 9:13





Question is completely simplified to my problem, but yes it can, and lets say I get products from many subqueries

– jimmy winstone
Nov 16 '18 at 9:13













So basically two cases are possible. Case 1: Get those customers which have purchased only 1,2,3 products and each one of them has been purchased atleast once. Case 2: Get those customers which have purchase each one of the 1,2,3 atleast (they may have purchased other products as well). Which case are you looking the solution for ?

– Madhur Bhaiya
Nov 16 '18 at 9:17





So basically two cases are possible. Case 1: Get those customers which have purchased only 1,2,3 products and each one of them has been purchased atleast once. Case 2: Get those customers which have purchase each one of the 1,2,3 atleast (they may have purchased other products as well). Which case are you looking the solution for ?

– Madhur Bhaiya
Nov 16 '18 at 9:17













Definitely the second solution, I need those who have at least once bought each of these products.

– jimmy winstone
Nov 16 '18 at 9:21





Definitely the second solution, I need those who have at least once bought each of these products.

– jimmy winstone
Nov 16 '18 at 9:21




1




1





Yes, your solution is really close to my problem, but instead of SUM(Product = 1) i put subqueries over there. Thank you :)

– jimmy winstone
Nov 16 '18 at 9:35





Yes, your solution is really close to my problem, but instead of SUM(Product = 1) i put subqueries over there. Thank you :)

– jimmy winstone
Nov 16 '18 at 9:35












2 Answers
2






active

oldest

votes


















2














You can GROUP BY on the Customer and use conditional aggregation based filtering inside the Having clause. MySQL automatically casts boolean values to 0/1 when using in numeric context.



In order to have a specific Product bought by a Customer, its SUM(Product = ..) should be 1.





Case 1: Get those customers which have purchased each one of the 1,2,3 products at-least (they may have purchased other products as well).



SELECT Customer
FROM your_table
GROUP BY Customer
HAVING SUM(Product = 1) AND -- 1 should be bought
SUM(Product = 2) AND -- 2 should be bought
SUM(Product = 3) -- 3 should be bought




If you want exclusivity, i.e., the customer has not bought any other product other than 1,2,3; then you can use the following instead.



Case 2: Get those customers which have purchased only 1,2,3 products and each one of them has been purchased at-least once.



SELECT Customer
FROM your_table
GROUP BY Customer
HAVING SUM(Product = 1) AND -- 1 should be bought
SUM(Product = 2) AND -- 2 should be bought
SUM(Product = 3) AND -- 3 should be bought
NOT SUM(Product NOT IN (1,2,3)) -- anything other 1,2,3 should not be bought





share|improve this answer

































    3














    if you want the customer who bought all the 3 product you could use aggregation function count(distinct product)



        SELECT Customer
    FROM your_table
    where product in (1,2,3)
    GROUP BY Customer
    HAVING count(distinct product) = 3





    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%2f53334460%2fchoosing-a-column-that-fulfills-many-conditions-in-different-records%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









      2














      You can GROUP BY on the Customer and use conditional aggregation based filtering inside the Having clause. MySQL automatically casts boolean values to 0/1 when using in numeric context.



      In order to have a specific Product bought by a Customer, its SUM(Product = ..) should be 1.





      Case 1: Get those customers which have purchased each one of the 1,2,3 products at-least (they may have purchased other products as well).



      SELECT Customer
      FROM your_table
      GROUP BY Customer
      HAVING SUM(Product = 1) AND -- 1 should be bought
      SUM(Product = 2) AND -- 2 should be bought
      SUM(Product = 3) -- 3 should be bought




      If you want exclusivity, i.e., the customer has not bought any other product other than 1,2,3; then you can use the following instead.



      Case 2: Get those customers which have purchased only 1,2,3 products and each one of them has been purchased at-least once.



      SELECT Customer
      FROM your_table
      GROUP BY Customer
      HAVING SUM(Product = 1) AND -- 1 should be bought
      SUM(Product = 2) AND -- 2 should be bought
      SUM(Product = 3) AND -- 3 should be bought
      NOT SUM(Product NOT IN (1,2,3)) -- anything other 1,2,3 should not be bought





      share|improve this answer






























        2














        You can GROUP BY on the Customer and use conditional aggregation based filtering inside the Having clause. MySQL automatically casts boolean values to 0/1 when using in numeric context.



        In order to have a specific Product bought by a Customer, its SUM(Product = ..) should be 1.





        Case 1: Get those customers which have purchased each one of the 1,2,3 products at-least (they may have purchased other products as well).



        SELECT Customer
        FROM your_table
        GROUP BY Customer
        HAVING SUM(Product = 1) AND -- 1 should be bought
        SUM(Product = 2) AND -- 2 should be bought
        SUM(Product = 3) -- 3 should be bought




        If you want exclusivity, i.e., the customer has not bought any other product other than 1,2,3; then you can use the following instead.



        Case 2: Get those customers which have purchased only 1,2,3 products and each one of them has been purchased at-least once.



        SELECT Customer
        FROM your_table
        GROUP BY Customer
        HAVING SUM(Product = 1) AND -- 1 should be bought
        SUM(Product = 2) AND -- 2 should be bought
        SUM(Product = 3) AND -- 3 should be bought
        NOT SUM(Product NOT IN (1,2,3)) -- anything other 1,2,3 should not be bought





        share|improve this answer




























          2












          2








          2







          You can GROUP BY on the Customer and use conditional aggregation based filtering inside the Having clause. MySQL automatically casts boolean values to 0/1 when using in numeric context.



          In order to have a specific Product bought by a Customer, its SUM(Product = ..) should be 1.





          Case 1: Get those customers which have purchased each one of the 1,2,3 products at-least (they may have purchased other products as well).



          SELECT Customer
          FROM your_table
          GROUP BY Customer
          HAVING SUM(Product = 1) AND -- 1 should be bought
          SUM(Product = 2) AND -- 2 should be bought
          SUM(Product = 3) -- 3 should be bought




          If you want exclusivity, i.e., the customer has not bought any other product other than 1,2,3; then you can use the following instead.



          Case 2: Get those customers which have purchased only 1,2,3 products and each one of them has been purchased at-least once.



          SELECT Customer
          FROM your_table
          GROUP BY Customer
          HAVING SUM(Product = 1) AND -- 1 should be bought
          SUM(Product = 2) AND -- 2 should be bought
          SUM(Product = 3) AND -- 3 should be bought
          NOT SUM(Product NOT IN (1,2,3)) -- anything other 1,2,3 should not be bought





          share|improve this answer















          You can GROUP BY on the Customer and use conditional aggregation based filtering inside the Having clause. MySQL automatically casts boolean values to 0/1 when using in numeric context.



          In order to have a specific Product bought by a Customer, its SUM(Product = ..) should be 1.





          Case 1: Get those customers which have purchased each one of the 1,2,3 products at-least (they may have purchased other products as well).



          SELECT Customer
          FROM your_table
          GROUP BY Customer
          HAVING SUM(Product = 1) AND -- 1 should be bought
          SUM(Product = 2) AND -- 2 should be bought
          SUM(Product = 3) -- 3 should be bought




          If you want exclusivity, i.e., the customer has not bought any other product other than 1,2,3; then you can use the following instead.



          Case 2: Get those customers which have purchased only 1,2,3 products and each one of them has been purchased at-least once.



          SELECT Customer
          FROM your_table
          GROUP BY Customer
          HAVING SUM(Product = 1) AND -- 1 should be bought
          SUM(Product = 2) AND -- 2 should be bought
          SUM(Product = 3) AND -- 3 should be bought
          NOT SUM(Product NOT IN (1,2,3)) -- anything other 1,2,3 should not be bought






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 16 '18 at 9:22

























          answered Nov 16 '18 at 9:01









          Madhur BhaiyaMadhur Bhaiya

          19.6k62236




          19.6k62236

























              3














              if you want the customer who bought all the 3 product you could use aggregation function count(distinct product)



                  SELECT Customer
              FROM your_table
              where product in (1,2,3)
              GROUP BY Customer
              HAVING count(distinct product) = 3





              share|improve this answer






























                3














                if you want the customer who bought all the 3 product you could use aggregation function count(distinct product)



                    SELECT Customer
                FROM your_table
                where product in (1,2,3)
                GROUP BY Customer
                HAVING count(distinct product) = 3





                share|improve this answer




























                  3












                  3








                  3







                  if you want the customer who bought all the 3 product you could use aggregation function count(distinct product)



                      SELECT Customer
                  FROM your_table
                  where product in (1,2,3)
                  GROUP BY Customer
                  HAVING count(distinct product) = 3





                  share|improve this answer















                  if you want the customer who bought all the 3 product you could use aggregation function count(distinct product)



                      SELECT Customer
                  FROM your_table
                  where product in (1,2,3)
                  GROUP BY Customer
                  HAVING count(distinct product) = 3






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 16 '18 at 9:42

























                  answered Nov 16 '18 at 9:04









                  scaisEdgescaisEdge

                  96.8k105272




                  96.8k105272






























                      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%2f53334460%2fchoosing-a-column-that-fulfills-many-conditions-in-different-records%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

                      Bressuire

                      Vorschmack

                      Quarantine