Using subqueries to show multiple answers which have this same value
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
New contributor
add a comment |
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
New contributor
1
Sample data and desired results would help.
– Gordon Linoff
Dec 27 at 13:42
add a comment |
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
New contributor
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
mysql sql database
New contributor
New contributor
edited Dec 27 at 13:42
Anson Aricatt
25313
25313
New contributor
asked Dec 27 at 13:30
programmer001
61
61
New contributor
New contributor
1
Sample data and desired results would help.
– Gordon Linoff
Dec 27 at 13:42
add a comment |
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
add a comment |
2 Answers
2
active
oldest
votes
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
add a comment |
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)
.
You're right. This is correct.
– MarCPlusPlus
Dec 27 at 14:14
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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
add a comment |
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
add a comment |
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
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
answered Dec 27 at 14:07
forpas
8,3961419
8,3961419
add a comment |
add a comment |
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)
.
You're right. This is correct.
– MarCPlusPlus
Dec 27 at 14:14
add a comment |
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)
.
You're right. This is correct.
– MarCPlusPlus
Dec 27 at 14:14
add a comment |
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)
.
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)
.
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
add a comment |
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
add a comment |
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.
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
1
Sample data and desired results would help.
– Gordon Linoff
Dec 27 at 13:42