【问题标题】:sql. Getting a max(avg(column))sql。获取最大值(平均(列))
【发布时间】:2012-05-11 20:04:26
【问题描述】:

我已经简化了我的问题并创建了这个例子来更好地说明。

我的桌子:

CREATE TABLE `table_company` (
  `source_id` INT(10) UNSIGNED NOT NULL,
  `company_id` INT(10) UNSIGNED NOT NULL,
  `clicks` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`source_id`,`company_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

我的数据:

INSERT INTO table_company VALUES
(1,100,8),(2,100,7),(3,200,9),(4,300,3),(5,100,4),(6,400,5),(7,100,10),(8,500,4),(9,500,9),(10,400,9);


SELECT source_id,company_id,AVG(clicks) AS avg_click FROM table_company
GROUP BY source_id,company_id
ORDER BY avg_click DESC;

给我:

source_id  company_id  avg_click  
---------  ----------  -----------
        7         100      10.0000
        3         200       9.0000
        9         500       9.0000
       10         400       9.0000
        1         100       8.0000
        2         100       7.0000
        6         400       5.0000
        5         100       4.0000
        8         500       4.0000
        4         300       3.0000

我想写一个查询给我:

source_id  company_id  avg_click  
---------  ----------  -----------
        7         100      10.0000
        3         200       9.0000
        9         500       9.0000
       10         400       9.0000
        4         300       3.0000

即。只保留具有 MAX(avg_click) 的 company_id

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    SELECT source_id, company_id, MAX(avg_click) as max_click FROM 
    (SELECT source_id,company_id,AVG(clicks) AS avg_click FROM table_company
    GROUP BY source_id,company_id
    ORDER BY avg_click DESC) tmp
    GROUP BY company_id
    

    【讨论】:

    • 谢谢。我有类似的东西,但没有正确执行我的外部 GROUP BY。
    【解决方案2】:
     SELECT MAx(source_id), company_id, MAX(avg_click)
     from (SELECT source_id,company_id,AVG(clicks) AS avg_click FROM #table_company 
        GROUP BY source_id,company_id 
        )as tbl
     GROUP by company_id 
    

    【讨论】:

      【解决方案3】:

      您可以使用相关性:

      SELECT source_id, company_id, avg_click
      FROM table_company TC
      WHERE avg_click=(SELECT max(avg_click)
                   FROM table_company TC2
                   WHERE TC.company_id=TC2.company_id
                   GROUP BY TC2.company_id);
      

      你也可以使用 WITH 子句:

      WITH pom AS(SELECT company_id, max(avg_click) MaxAvgCl
                  from table_company
                  group by company_id)
      SELECT pom.company_id, T.avg_click, T.source_id
      FROM pom JOIN table_company T on T.company_id=pom.company_id 
                                    and T.avg_click=pom.MaxAvgCl;
      

      【讨论】:

        猜你喜欢
        • 2021-02-14
        • 2022-11-10
        • 2014-08-04
        • 1970-01-01
        • 1970-01-01
        • 2014-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多