代码之家  ›  专栏  ›  技术社区  ›  helcode srinivasan Elangovan

根据最大分类出现次数筛选表

  •  2
  • helcode srinivasan Elangovan  · 技术社区  · 6 年前

    我有三列表格如下

    | Category  | Author      | Sales     |
    +++++++++++++++++++++++++++++++++++++++
    | NW        | account-1   | 10        |
    | NW        | account-2   | 20        |
    | NW        | account-3   | 30        |
    | S         | account-4   | 10        |
    | S         | account-5   | 50        |
    | S         | account-6   | 55        |
    

    我想用每个类别的最大值生成另一个表,所需的表应该如下所示。

    | Category  | Author      | Sales     |
    +++++++++++++++++++++++++++++++++++++++
    | NW        | account-3   | 30        |
    | S         | account-6   | 55        |
    

    我的编码试验,

    SELECT Category, Author, MAX(Sales)
    FROM table
    GROUP BY Category, Author
    

    MAX()

    6 回复  |  直到 6 年前
        1
  •  1
  •   Roman    6 年前

    来回答你的问题 .

    说明:你的 对max(Sales)的原始查询

    1. 然后,您可以根据“作者”和“类别”的组合筛选原始表,其中“类别”的销售编号与“每个类别的最大销售编号”相同。

    SELECT tbl_sales.Category, tbl_sales.Author, tbl_sales.Sales
    FROM tbl_sales
    JOIN(
        SELECT Category, MAX(Sales) MaxSales
        FROM tbl_sales
        GROUP BY Category
        ) tbl_maxsales
    ON tbl_sales.Sales = tbl_maxsales.MaxSales
    

    你可以找到 a SQL fiddle implementation here .

    如果你有任何问题或需要更多的指导,请不要犹豫给我留言或留下评论。

        2
  •  1
  •   Gordon Linoff    6 年前

    我建议使用相关子查询:

    select t.*
    from t
    where t.sales = (select max(t2.sales) from t t2 where t2.category = t.category);
    

    (category, sales) --如果可用--优化此查询。

    category author . 你想在中国获得最大的销量吗 . 你想要作者 最大销售量 max(author) 或者通过 作者

        3
  •  1
  •   D-Shih    6 年前

    因为 Group by GROUP BY Category, Author group by 通过 Category Author 列,所以有六个组。

    查询

    select Category,Author
    from t
    group by Category,Author
    

    :

    | Category |    Author |
    |----------|-----------|
    |       NW | account-1 |
    |       NW | account-2 |
    |       NW | account-3 |
    |        S | account-4 |
    |        S | account-5 |
    |        S | account-6 |
    

    但如果我们这样做 group by Category ,有两组。

    select Category
    from t
    group by Category
    

    [结果]

    | Category |
    |----------|
    |       NW |
    |        S |
    

    MAX 销售栏 按类别分组 类别

    CREATE TABLE T(
        Category varchar(5),
        Author varchar(50),
        Sales int
    );
    
    
    insert into t values ('NW','account-1', 10);
    insert into t values ('NW','account-2', 20);
    insert into t values ('NW','account-3', 30);
    insert into t values ('S','account-4', 10);
    insert into t values ('S','account-5', 50);
    insert into t values ('S','account-6', 55);
    

    查询1

    select * from t t1 where exists(
      SELECT 1
      FROM T tt
      WHERE t1.Category = tt.Category
      GROUP BY tt.Category
      HAVING MAX(tt.Sales) = t1.Sales
    )
    

    Results :

    | Category |    Author | Sales |
    |----------|-----------|-------|
    |       NW | account-3 |    30 |
    |        S | account-6 |    55 |
    
        4
  •  0
  •   ScaisEdge    6 年前

    max()不要失败。。您正在按类别、作者分组,因此您的查询返回表中类别和作者之间的每个组合的每个最大销售额。。

      select * from my_table m
      inner join (
    
      select category, max(sales) max_sales
      from  my_table  
      group by category 
    
    
    
      ) t  on t.category  =  m.category and t.max_sales = m.sales 
    
        5
  •  0
  •   Arrow    6 年前

    请尝试以下语句

    SELECT * from TableName AS T1 WHERE EXISTS(
      SELECT 1
      FROM TableName AS T2
      WHERE T1.Category = T2.Category
      GROUP BY T2.Category
      HAVING MAX(T2.Sales) = T1.Sales)
    

    当做

        6
  •  0
  •   Alireza Yadegari    6 年前

    ;WITH query AS (
        SELECT          
            ROW_NUMBER() OVER (PARTITION BY  Category  ORDER BY Sales DESC) AS [Index],
            Category,
            Sales 
        FROM 
            table
    )
    
    SELECT * FROM query WHERE [Index] = 1