Get max value per id [duplicate]
up vote
2
down vote
favorite
This question already has an answer here:
SQL counting all rows instead of counting individual rows
1 answer
I have this query :
BEGIN
DROP TABLE IF EXISTS `tblquota`;
CREATE TABLE IF NOT EXISTS tblquota (id INT AUTO_INCREMENT PRIMARY KEY) AS
SELECT c.id as user_id
, c.`email`
, h.`packageid` as pack_id
, p.`name` as pack_name
, max(CASE
WHEN `name` = "Basic" THEN '100'
WHEN `name` = "Silver" THEN '100'
WHEN `name` = "Gold" THEN '100'
ELSE '10'
END) as quota
FROM `tblclients` c
LEFT JOIN `tblhosting` h ON c.id = h.userid
INNER JOIN `tblproducts` p ON h.packageid = p.id
ORDER BY c.id;
END
In this case, the query will only get the max value for only one customer. I would like to get the value per customer.
table clients:
id | email | status
----------------------------
1 | user1@mail.com | Active
2 | user2@mail.com | Inactive
3 | user3@mail.com | Active
table tblhosting
id | userid | packageid | domainstatus
------------------------------------------------
1 | 1 | 3 | Active
2 | 1 | 2 | Active
3 | 2 | 1 | Active
4 | 2 | 2 | Active
5 | 2 | 3 | Inactive
6 | 3 | 1 | Active
table tblproducts
id | name
-----------
1 | Basic
2 | Silver
3 | Gold
I expect result like :
id | user_id | email | pack_id | pack_name | quota
-----------------------------------------------------------
1 | 1 | user1@mail.com | 3 | Gold | 1000
2 | 2 | user2@mail.com | 2 | Silver | 100
3 | 3 | user3@mail.com | 1 | Basic | 10
mysql sql
marked as duplicate by Barmar
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
yesterday
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |
up vote
2
down vote
favorite
This question already has an answer here:
SQL counting all rows instead of counting individual rows
1 answer
I have this query :
BEGIN
DROP TABLE IF EXISTS `tblquota`;
CREATE TABLE IF NOT EXISTS tblquota (id INT AUTO_INCREMENT PRIMARY KEY) AS
SELECT c.id as user_id
, c.`email`
, h.`packageid` as pack_id
, p.`name` as pack_name
, max(CASE
WHEN `name` = "Basic" THEN '100'
WHEN `name` = "Silver" THEN '100'
WHEN `name` = "Gold" THEN '100'
ELSE '10'
END) as quota
FROM `tblclients` c
LEFT JOIN `tblhosting` h ON c.id = h.userid
INNER JOIN `tblproducts` p ON h.packageid = p.id
ORDER BY c.id;
END
In this case, the query will only get the max value for only one customer. I would like to get the value per customer.
table clients:
id | email | status
----------------------------
1 | user1@mail.com | Active
2 | user2@mail.com | Inactive
3 | user3@mail.com | Active
table tblhosting
id | userid | packageid | domainstatus
------------------------------------------------
1 | 1 | 3 | Active
2 | 1 | 2 | Active
3 | 2 | 1 | Active
4 | 2 | 2 | Active
5 | 2 | 3 | Inactive
6 | 3 | 1 | Active
table tblproducts
id | name
-----------
1 | Basic
2 | Silver
3 | Gold
I expect result like :
id | user_id | email | pack_id | pack_name | quota
-----------------------------------------------------------
1 | 1 | user1@mail.com | 3 | Gold | 1000
2 | 2 | user2@mail.com | 2 | Silver | 100
3 | 3 | user3@mail.com | 1 | Basic | 10
mysql sql
marked as duplicate by Barmar
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
yesterday
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
1
You needGROUP BY c.id
.
– Barmar
yesterday
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
This question already has an answer here:
SQL counting all rows instead of counting individual rows
1 answer
I have this query :
BEGIN
DROP TABLE IF EXISTS `tblquota`;
CREATE TABLE IF NOT EXISTS tblquota (id INT AUTO_INCREMENT PRIMARY KEY) AS
SELECT c.id as user_id
, c.`email`
, h.`packageid` as pack_id
, p.`name` as pack_name
, max(CASE
WHEN `name` = "Basic" THEN '100'
WHEN `name` = "Silver" THEN '100'
WHEN `name` = "Gold" THEN '100'
ELSE '10'
END) as quota
FROM `tblclients` c
LEFT JOIN `tblhosting` h ON c.id = h.userid
INNER JOIN `tblproducts` p ON h.packageid = p.id
ORDER BY c.id;
END
In this case, the query will only get the max value for only one customer. I would like to get the value per customer.
table clients:
id | email | status
----------------------------
1 | user1@mail.com | Active
2 | user2@mail.com | Inactive
3 | user3@mail.com | Active
table tblhosting
id | userid | packageid | domainstatus
------------------------------------------------
1 | 1 | 3 | Active
2 | 1 | 2 | Active
3 | 2 | 1 | Active
4 | 2 | 2 | Active
5 | 2 | 3 | Inactive
6 | 3 | 1 | Active
table tblproducts
id | name
-----------
1 | Basic
2 | Silver
3 | Gold
I expect result like :
id | user_id | email | pack_id | pack_name | quota
-----------------------------------------------------------
1 | 1 | user1@mail.com | 3 | Gold | 1000
2 | 2 | user2@mail.com | 2 | Silver | 100
3 | 3 | user3@mail.com | 1 | Basic | 10
mysql sql
This question already has an answer here:
SQL counting all rows instead of counting individual rows
1 answer
I have this query :
BEGIN
DROP TABLE IF EXISTS `tblquota`;
CREATE TABLE IF NOT EXISTS tblquota (id INT AUTO_INCREMENT PRIMARY KEY) AS
SELECT c.id as user_id
, c.`email`
, h.`packageid` as pack_id
, p.`name` as pack_name
, max(CASE
WHEN `name` = "Basic" THEN '100'
WHEN `name` = "Silver" THEN '100'
WHEN `name` = "Gold" THEN '100'
ELSE '10'
END) as quota
FROM `tblclients` c
LEFT JOIN `tblhosting` h ON c.id = h.userid
INNER JOIN `tblproducts` p ON h.packageid = p.id
ORDER BY c.id;
END
In this case, the query will only get the max value for only one customer. I would like to get the value per customer.
table clients:
id | email | status
----------------------------
1 | user1@mail.com | Active
2 | user2@mail.com | Inactive
3 | user3@mail.com | Active
table tblhosting
id | userid | packageid | domainstatus
------------------------------------------------
1 | 1 | 3 | Active
2 | 1 | 2 | Active
3 | 2 | 1 | Active
4 | 2 | 2 | Active
5 | 2 | 3 | Inactive
6 | 3 | 1 | Active
table tblproducts
id | name
-----------
1 | Basic
2 | Silver
3 | Gold
I expect result like :
id | user_id | email | pack_id | pack_name | quota
-----------------------------------------------------------
1 | 1 | user1@mail.com | 3 | Gold | 1000
2 | 2 | user2@mail.com | 2 | Silver | 100
3 | 3 | user3@mail.com | 1 | Basic | 10
This question already has an answer here:
SQL counting all rows instead of counting individual rows
1 answer
mysql sql
mysql sql
edited yesterday
asked yesterday
executable
899221
899221
marked as duplicate by Barmar
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
yesterday
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by Barmar
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
yesterday
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
1
You needGROUP BY c.id
.
– Barmar
yesterday
add a comment |
1
You needGROUP BY c.id
.
– Barmar
yesterday
1
1
You need
GROUP BY c.id
.– Barmar
yesterday
You need
GROUP BY c.id
.– Barmar
yesterday
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
What you are looking for is Max OVER (PARTITION BY user_id)
Can you show how to use it ?
– executable
yesterday
Max(case when..…..) over (partition by user_id) as quota
– Kristjan Kica
yesterday
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
What you are looking for is Max OVER (PARTITION BY user_id)
Can you show how to use it ?
– executable
yesterday
Max(case when..…..) over (partition by user_id) as quota
– Kristjan Kica
yesterday
add a comment |
up vote
0
down vote
What you are looking for is Max OVER (PARTITION BY user_id)
Can you show how to use it ?
– executable
yesterday
Max(case when..…..) over (partition by user_id) as quota
– Kristjan Kica
yesterday
add a comment |
up vote
0
down vote
up vote
0
down vote
What you are looking for is Max OVER (PARTITION BY user_id)
What you are looking for is Max OVER (PARTITION BY user_id)
answered yesterday
Kristjan Kica
2,0311826
2,0311826
Can you show how to use it ?
– executable
yesterday
Max(case when..…..) over (partition by user_id) as quota
– Kristjan Kica
yesterday
add a comment |
Can you show how to use it ?
– executable
yesterday
Max(case when..…..) over (partition by user_id) as quota
– Kristjan Kica
yesterday
Can you show how to use it ?
– executable
yesterday
Can you show how to use it ?
– executable
yesterday
Max(case when..…..) over (partition by user_id) as quota
– Kristjan Kica
yesterday
Max(case when..…..) over (partition by user_id) as quota
– Kristjan Kica
yesterday
add a comment |
1
You need
GROUP BY c.id
.– Barmar
yesterday