[英]sql. Getting a max(avg(column))
我已经简化了我的问题并创建了这个例子来更好地说明。
我的桌子:
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的company_id(avg_click)
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
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
您可以使用相关性:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.