Using subqueries to show multiple answers which have this same value












0














I want to show this products which has the highest prize (group by manufacturer). But if two products has this same prize, SQL shows me one of them.



SELECT name, manufacturer, MAX(prize)
FROM products p
GROUP BY manufacturer
HAVING MAX(prize) = (SELECT MAX(p1.prize)
FROM products p1
WHERE p.manufacturer = p1.manufacturer
LIMIT 1
);









share|improve this question









New contributor




programmer001 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 1




    Sample data and desired results would help.
    – Gordon Linoff
    Dec 27 at 13:42
















0














I want to show this products which has the highest prize (group by manufacturer). But if two products has this same prize, SQL shows me one of them.



SELECT name, manufacturer, MAX(prize)
FROM products p
GROUP BY manufacturer
HAVING MAX(prize) = (SELECT MAX(p1.prize)
FROM products p1
WHERE p.manufacturer = p1.manufacturer
LIMIT 1
);









share|improve this question









New contributor




programmer001 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 1




    Sample data and desired results would help.
    – Gordon Linoff
    Dec 27 at 13:42














0












0








0







I want to show this products which has the highest prize (group by manufacturer). But if two products has this same prize, SQL shows me one of them.



SELECT name, manufacturer, MAX(prize)
FROM products p
GROUP BY manufacturer
HAVING MAX(prize) = (SELECT MAX(p1.prize)
FROM products p1
WHERE p.manufacturer = p1.manufacturer
LIMIT 1
);









share|improve this question









New contributor




programmer001 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











I want to show this products which has the highest prize (group by manufacturer). But if two products has this same prize, SQL shows me one of them.



SELECT name, manufacturer, MAX(prize)
FROM products p
GROUP BY manufacturer
HAVING MAX(prize) = (SELECT MAX(p1.prize)
FROM products p1
WHERE p.manufacturer = p1.manufacturer
LIMIT 1
);






mysql sql database






share|improve this question









New contributor




programmer001 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




programmer001 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited Dec 27 at 13:42









Anson Aricatt

25313




25313






New contributor




programmer001 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked Dec 27 at 13:30









programmer001

61




61




New contributor




programmer001 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





programmer001 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






programmer001 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








  • 1




    Sample data and desired results would help.
    – Gordon Linoff
    Dec 27 at 13:42














  • 1




    Sample data and desired results would help.
    – Gordon Linoff
    Dec 27 at 13:42








1




1




Sample data and desired results would help.
– Gordon Linoff
Dec 27 at 13:42




Sample data and desired results would help.
– Gordon Linoff
Dec 27 at 13:42












2 Answers
2






active

oldest

votes


















1














First select all the max prizes group by maufacturer and join to the main table:



select p.* from
(select manufacturer, MAX(prize) AS maxprize from products GROUP BY manufacturer) AS m
inner join products p
on m.manufacturer = p.manufacturer and m.maxprize = p.prize
order by p.manufacturer, p.name


See demo






share|improve this answer





























    1














    You seem to want a simple subquery -- no aggregation in the outer query:



    SELECT p.*
    FROM products p
    WHERE p.prize = (SELECT MAX(p2.prize)
    FROM products p2
    WHERE p2.manufacturer = p.manufacturer
    );


    As mentioned in your previous question, your use of GROUP BY is not correct. You have unaggregated columns in the SELECT that are not in the GROUP BY.



    Your use of aggregation in the outer query is why you are getting only one row per manufacturer.



    In terms of performance, this is often the fastest method -- with the right indexes. In this case, the right index is on (manufacturer, prize).






    share|improve this answer























    • You're right. This is correct.
      – MarCPlusPlus
      Dec 27 at 14:14











    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
    });


    }
    });






    programmer001 is a new contributor. Be nice, and check out our Code of Conduct.










    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53945913%2fusing-subqueries-to-show-multiple-answers-which-have-this-same-value%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









    1














    First select all the max prizes group by maufacturer and join to the main table:



    select p.* from
    (select manufacturer, MAX(prize) AS maxprize from products GROUP BY manufacturer) AS m
    inner join products p
    on m.manufacturer = p.manufacturer and m.maxprize = p.prize
    order by p.manufacturer, p.name


    See demo






    share|improve this answer


























      1














      First select all the max prizes group by maufacturer and join to the main table:



      select p.* from
      (select manufacturer, MAX(prize) AS maxprize from products GROUP BY manufacturer) AS m
      inner join products p
      on m.manufacturer = p.manufacturer and m.maxprize = p.prize
      order by p.manufacturer, p.name


      See demo






      share|improve this answer
























        1












        1








        1






        First select all the max prizes group by maufacturer and join to the main table:



        select p.* from
        (select manufacturer, MAX(prize) AS maxprize from products GROUP BY manufacturer) AS m
        inner join products p
        on m.manufacturer = p.manufacturer and m.maxprize = p.prize
        order by p.manufacturer, p.name


        See demo






        share|improve this answer












        First select all the max prizes group by maufacturer and join to the main table:



        select p.* from
        (select manufacturer, MAX(prize) AS maxprize from products GROUP BY manufacturer) AS m
        inner join products p
        on m.manufacturer = p.manufacturer and m.maxprize = p.prize
        order by p.manufacturer, p.name


        See demo







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Dec 27 at 14:07









        forpas

        8,3961419




        8,3961419

























            1














            You seem to want a simple subquery -- no aggregation in the outer query:



            SELECT p.*
            FROM products p
            WHERE p.prize = (SELECT MAX(p2.prize)
            FROM products p2
            WHERE p2.manufacturer = p.manufacturer
            );


            As mentioned in your previous question, your use of GROUP BY is not correct. You have unaggregated columns in the SELECT that are not in the GROUP BY.



            Your use of aggregation in the outer query is why you are getting only one row per manufacturer.



            In terms of performance, this is often the fastest method -- with the right indexes. In this case, the right index is on (manufacturer, prize).






            share|improve this answer























            • You're right. This is correct.
              – MarCPlusPlus
              Dec 27 at 14:14
















            1














            You seem to want a simple subquery -- no aggregation in the outer query:



            SELECT p.*
            FROM products p
            WHERE p.prize = (SELECT MAX(p2.prize)
            FROM products p2
            WHERE p2.manufacturer = p.manufacturer
            );


            As mentioned in your previous question, your use of GROUP BY is not correct. You have unaggregated columns in the SELECT that are not in the GROUP BY.



            Your use of aggregation in the outer query is why you are getting only one row per manufacturer.



            In terms of performance, this is often the fastest method -- with the right indexes. In this case, the right index is on (manufacturer, prize).






            share|improve this answer























            • You're right. This is correct.
              – MarCPlusPlus
              Dec 27 at 14:14














            1












            1








            1






            You seem to want a simple subquery -- no aggregation in the outer query:



            SELECT p.*
            FROM products p
            WHERE p.prize = (SELECT MAX(p2.prize)
            FROM products p2
            WHERE p2.manufacturer = p.manufacturer
            );


            As mentioned in your previous question, your use of GROUP BY is not correct. You have unaggregated columns in the SELECT that are not in the GROUP BY.



            Your use of aggregation in the outer query is why you are getting only one row per manufacturer.



            In terms of performance, this is often the fastest method -- with the right indexes. In this case, the right index is on (manufacturer, prize).






            share|improve this answer














            You seem to want a simple subquery -- no aggregation in the outer query:



            SELECT p.*
            FROM products p
            WHERE p.prize = (SELECT MAX(p2.prize)
            FROM products p2
            WHERE p2.manufacturer = p.manufacturer
            );


            As mentioned in your previous question, your use of GROUP BY is not correct. You have unaggregated columns in the SELECT that are not in the GROUP BY.



            Your use of aggregation in the outer query is why you are getting only one row per manufacturer.



            In terms of performance, this is often the fastest method -- with the right indexes. In this case, the right index is on (manufacturer, prize).







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Dec 27 at 14:10

























            answered Dec 27 at 13:42









            Gordon Linoff

            758k35291399




            758k35291399












            • You're right. This is correct.
              – MarCPlusPlus
              Dec 27 at 14:14


















            • You're right. This is correct.
              – MarCPlusPlus
              Dec 27 at 14:14
















            You're right. This is correct.
            – MarCPlusPlus
            Dec 27 at 14:14




            You're right. This is correct.
            – MarCPlusPlus
            Dec 27 at 14:14










            programmer001 is a new contributor. Be nice, and check out our Code of Conduct.










            draft saved

            draft discarded


















            programmer001 is a new contributor. Be nice, and check out our Code of Conduct.













            programmer001 is a new contributor. Be nice, and check out our Code of Conduct.












            programmer001 is a new contributor. Be nice, and check out our Code of Conduct.
















            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.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • 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%2f53945913%2fusing-subqueries-to-show-multiple-answers-which-have-this-same-value%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

            Monofisismo

            Angular Downloading a file using contenturl with Basic Authentication

            Olmecas