【问题标题】:Get max value per id [duplicate]获取每个 id 的最大值 [重复]
【发布时间】:2018-11-19 18:05:01
【问题描述】:

我有这个问题:

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

在这种情况下,查询只会获取一位客户的最大值。我想获得每位客户的价值。

客户

id | email          | status
----------------------------
1  | user1@mail.com | Active
2  | user2@mail.com | Inactive
3  | user3@mail.com | Active

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

tblproducts

id | name 
-----------
1  | Basic
2  | Silver
3  | Gold

我希望结果如下:

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

【问题讨论】:

  • 你需要GROUP BY c.id

标签: mysql sql


【解决方案1】:

你要找的是Max OVER (PARTITION BY user_id)

【讨论】:

  • 你能说明如何使用它吗?
  • Max(case when.......) over (partition by user_id) as quota
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
  • 2017-09-12
  • 2010-10-19
  • 1970-01-01
  • 2018-10-06
  • 2019-08-14
  • 2020-04-16
相关资源
最近更新 更多