1

私は自分の問題を単純化し、よりよく説明するためにこの例を作成しました。

私のテーブル:

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 のみを保持します。

4

3 に答える 3

4
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
于 2012-05-11T20:13:41.403 に答える
0
 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 
于 2012-05-11T20:28:54.340 に答える