Showing maximum












0














I want to show maximum of guarantee which specific user has. For example user has bought 3 items which have 1,2,5 years guarantee. So I want to show 5 years guarantee and name of this product.
I did subquery in case few products have this same guarantee.



SELECT t.`id-user`, name, guarantee FROM transactions t 
JOIN user u ON `t`.`id-user` = `u`.`id-user`
JOIN products p ON `p`.`id-product = `t`.`id-product`
WHERE guarantee = (SELECT MAX(p2.guarantee)
FROM products p2
WHERE `p2`.`id-product` = `p`.`id-product`)


This query shows all products and their guarantees.










share|improve this question




















  • 2




    Allowing '-' as a table/column identifier has the potential for catastrophic damage
    – Strawberry
    Dec 27 '18 at 20:28
















0














I want to show maximum of guarantee which specific user has. For example user has bought 3 items which have 1,2,5 years guarantee. So I want to show 5 years guarantee and name of this product.
I did subquery in case few products have this same guarantee.



SELECT t.`id-user`, name, guarantee FROM transactions t 
JOIN user u ON `t`.`id-user` = `u`.`id-user`
JOIN products p ON `p`.`id-product = `t`.`id-product`
WHERE guarantee = (SELECT MAX(p2.guarantee)
FROM products p2
WHERE `p2`.`id-product` = `p`.`id-product`)


This query shows all products and their guarantees.










share|improve this question




















  • 2




    Allowing '-' as a table/column identifier has the potential for catastrophic damage
    – Strawberry
    Dec 27 '18 at 20:28














0












0








0







I want to show maximum of guarantee which specific user has. For example user has bought 3 items which have 1,2,5 years guarantee. So I want to show 5 years guarantee and name of this product.
I did subquery in case few products have this same guarantee.



SELECT t.`id-user`, name, guarantee FROM transactions t 
JOIN user u ON `t`.`id-user` = `u`.`id-user`
JOIN products p ON `p`.`id-product = `t`.`id-product`
WHERE guarantee = (SELECT MAX(p2.guarantee)
FROM products p2
WHERE `p2`.`id-product` = `p`.`id-product`)


This query shows all products and their guarantees.










share|improve this question















I want to show maximum of guarantee which specific user has. For example user has bought 3 items which have 1,2,5 years guarantee. So I want to show 5 years guarantee and name of this product.
I did subquery in case few products have this same guarantee.



SELECT t.`id-user`, name, guarantee FROM transactions t 
JOIN user u ON `t`.`id-user` = `u`.`id-user`
JOIN products p ON `p`.`id-product = `t`.`id-product`
WHERE guarantee = (SELECT MAX(p2.guarantee)
FROM products p2
WHERE `p2`.`id-product` = `p`.`id-product`)


This query shows all products and their guarantees.







mysql sql






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 27 '18 at 22:30









Shadow

25.6k92743




25.6k92743










asked Dec 27 '18 at 20:05









programmer001

61




61








  • 2




    Allowing '-' as a table/column identifier has the potential for catastrophic damage
    – Strawberry
    Dec 27 '18 at 20:28














  • 2




    Allowing '-' as a table/column identifier has the potential for catastrophic damage
    – Strawberry
    Dec 27 '18 at 20:28








2




2




Allowing '-' as a table/column identifier has the potential for catastrophic damage
– Strawberry
Dec 27 '18 at 20:28




Allowing '-' as a table/column identifier has the potential for catastrophic damage
– Strawberry
Dec 27 '18 at 20:28












2 Answers
2






active

oldest

votes


















0














I think the simplest method is the substring_index()/group_concat() method for getting values associated with a maximum/minimum:



SELECT t.iduser, u.name,
MAX(p.guarantee) as guarantee,
SUBSTRING_INDEX(GROUP_CONCAT(p.name ORDER BY p.guarantee DESC), ',', 1)
FROM transactions t JOIN
user u
ON t.iduser = u.iduser JOIN
products p
ON p.idproduct = t.idproduct
GROUP BY t.iduser, u.name;


You can use your method too, but the correlated subquery is tricky:



SELECT t.iduser, u.name, p.guarantee, p.name
FROM transactions t JOIN
user u
ON t.iduser = u.iduser JOIN
products p
ON p.idproduct = t.idproduct
WHERE p.guarantee = (SELECT MAX(p2.guarantee)
FROM transactions t2 JOIN
products p2
ON p2.idproduct = t2.idproduct
WHERE t2.iduser = u.iduser
);





share|improve this answer



















  • 1




    ah crap. Gordon is here. No more SQL reputation for me :/
    – The Impaler
    Dec 27 '18 at 20:09



















0














I think it work.



select [User].Name as [UserName],
Product.MaxGuarantee,
Product.Name as Product_Name
from [Users] [User]
left join Transactions [Transaction]
on [Transaction].[User] = [User].ID
cross apply(
select max(guarantee) MaxGuarantee, Name
from Products
where ID = [Transaction].Product
) Product
where [User].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%2f53950310%2fshowing-maximum%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














    I think the simplest method is the substring_index()/group_concat() method for getting values associated with a maximum/minimum:



    SELECT t.iduser, u.name,
    MAX(p.guarantee) as guarantee,
    SUBSTRING_INDEX(GROUP_CONCAT(p.name ORDER BY p.guarantee DESC), ',', 1)
    FROM transactions t JOIN
    user u
    ON t.iduser = u.iduser JOIN
    products p
    ON p.idproduct = t.idproduct
    GROUP BY t.iduser, u.name;


    You can use your method too, but the correlated subquery is tricky:



    SELECT t.iduser, u.name, p.guarantee, p.name
    FROM transactions t JOIN
    user u
    ON t.iduser = u.iduser JOIN
    products p
    ON p.idproduct = t.idproduct
    WHERE p.guarantee = (SELECT MAX(p2.guarantee)
    FROM transactions t2 JOIN
    products p2
    ON p2.idproduct = t2.idproduct
    WHERE t2.iduser = u.iduser
    );





    share|improve this answer



















    • 1




      ah crap. Gordon is here. No more SQL reputation for me :/
      – The Impaler
      Dec 27 '18 at 20:09
















    0














    I think the simplest method is the substring_index()/group_concat() method for getting values associated with a maximum/minimum:



    SELECT t.iduser, u.name,
    MAX(p.guarantee) as guarantee,
    SUBSTRING_INDEX(GROUP_CONCAT(p.name ORDER BY p.guarantee DESC), ',', 1)
    FROM transactions t JOIN
    user u
    ON t.iduser = u.iduser JOIN
    products p
    ON p.idproduct = t.idproduct
    GROUP BY t.iduser, u.name;


    You can use your method too, but the correlated subquery is tricky:



    SELECT t.iduser, u.name, p.guarantee, p.name
    FROM transactions t JOIN
    user u
    ON t.iduser = u.iduser JOIN
    products p
    ON p.idproduct = t.idproduct
    WHERE p.guarantee = (SELECT MAX(p2.guarantee)
    FROM transactions t2 JOIN
    products p2
    ON p2.idproduct = t2.idproduct
    WHERE t2.iduser = u.iduser
    );





    share|improve this answer



















    • 1




      ah crap. Gordon is here. No more SQL reputation for me :/
      – The Impaler
      Dec 27 '18 at 20:09














    0












    0








    0






    I think the simplest method is the substring_index()/group_concat() method for getting values associated with a maximum/minimum:



    SELECT t.iduser, u.name,
    MAX(p.guarantee) as guarantee,
    SUBSTRING_INDEX(GROUP_CONCAT(p.name ORDER BY p.guarantee DESC), ',', 1)
    FROM transactions t JOIN
    user u
    ON t.iduser = u.iduser JOIN
    products p
    ON p.idproduct = t.idproduct
    GROUP BY t.iduser, u.name;


    You can use your method too, but the correlated subquery is tricky:



    SELECT t.iduser, u.name, p.guarantee, p.name
    FROM transactions t JOIN
    user u
    ON t.iduser = u.iduser JOIN
    products p
    ON p.idproduct = t.idproduct
    WHERE p.guarantee = (SELECT MAX(p2.guarantee)
    FROM transactions t2 JOIN
    products p2
    ON p2.idproduct = t2.idproduct
    WHERE t2.iduser = u.iduser
    );





    share|improve this answer














    I think the simplest method is the substring_index()/group_concat() method for getting values associated with a maximum/minimum:



    SELECT t.iduser, u.name,
    MAX(p.guarantee) as guarantee,
    SUBSTRING_INDEX(GROUP_CONCAT(p.name ORDER BY p.guarantee DESC), ',', 1)
    FROM transactions t JOIN
    user u
    ON t.iduser = u.iduser JOIN
    products p
    ON p.idproduct = t.idproduct
    GROUP BY t.iduser, u.name;


    You can use your method too, but the correlated subquery is tricky:



    SELECT t.iduser, u.name, p.guarantee, p.name
    FROM transactions t JOIN
    user u
    ON t.iduser = u.iduser JOIN
    products p
    ON p.idproduct = t.idproduct
    WHERE p.guarantee = (SELECT MAX(p2.guarantee)
    FROM transactions t2 JOIN
    products p2
    ON p2.idproduct = t2.idproduct
    WHERE t2.iduser = u.iduser
    );






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Dec 27 '18 at 20:10

























    answered Dec 27 '18 at 20:08









    Gordon Linoff

    759k35292399




    759k35292399








    • 1




      ah crap. Gordon is here. No more SQL reputation for me :/
      – The Impaler
      Dec 27 '18 at 20:09














    • 1




      ah crap. Gordon is here. No more SQL reputation for me :/
      – The Impaler
      Dec 27 '18 at 20:09








    1




    1




    ah crap. Gordon is here. No more SQL reputation for me :/
    – The Impaler
    Dec 27 '18 at 20:09




    ah crap. Gordon is here. No more SQL reputation for me :/
    – The Impaler
    Dec 27 '18 at 20:09













    0














    I think it work.



    select [User].Name as [UserName],
    Product.MaxGuarantee,
    Product.Name as Product_Name
    from [Users] [User]
    left join Transactions [Transaction]
    on [Transaction].[User] = [User].ID
    cross apply(
    select max(guarantee) MaxGuarantee, Name
    from Products
    where ID = [Transaction].Product
    ) Product
    where [User].ID = ''





    share|improve this answer


























      0














      I think it work.



      select [User].Name as [UserName],
      Product.MaxGuarantee,
      Product.Name as Product_Name
      from [Users] [User]
      left join Transactions [Transaction]
      on [Transaction].[User] = [User].ID
      cross apply(
      select max(guarantee) MaxGuarantee, Name
      from Products
      where ID = [Transaction].Product
      ) Product
      where [User].ID = ''





      share|improve this answer
























        0












        0








        0






        I think it work.



        select [User].Name as [UserName],
        Product.MaxGuarantee,
        Product.Name as Product_Name
        from [Users] [User]
        left join Transactions [Transaction]
        on [Transaction].[User] = [User].ID
        cross apply(
        select max(guarantee) MaxGuarantee, Name
        from Products
        where ID = [Transaction].Product
        ) Product
        where [User].ID = ''





        share|improve this answer












        I think it work.



        select [User].Name as [UserName],
        Product.MaxGuarantee,
        Product.Name as Product_Name
        from [Users] [User]
        left join Transactions [Transaction]
        on [Transaction].[User] = [User].ID
        cross apply(
        select max(guarantee) MaxGuarantee, Name
        from Products
        where ID = [Transaction].Product
        ) Product
        where [User].ID = ''






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Dec 28 '18 at 0:13









        Mehrdad

        12




        12






























            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.





            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%2f53950310%2fshowing-maximum%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