繁体   English   中英

我如何通过MYSQL中的另一列选择具有最大值,DISTINCT的行

[英]How can I SELECT rows with Max value, DISTINCT by another column in MYSQL

我有这个示例表:

id        city       show    
-------  -------    ------ 
 1        Paris     Show1
 2        NY        Show1
 3        Paris     Show2
 4        Madrid    Show3
 5        Madrid    Show3
 6        NY        Show2
 7        NY        Show1
 8        Paris     Show2

请Plz有人可以帮助我进行MySQL查询,以使您最多看到城市显示的节目。 结果应该是这样的:

city      Show      Occurence
 NY       Show1        2
Paris     Show2        2
Madrid    Show3        2

我将非常感谢您的帮助。

例如:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,city VARCHAR(12) NOT NULL
,performance VARCHAR(12) NOT NULL
);

INSERT INTO my_table VALUES
(1,'Paris'     ,'Show1'),
(2,'NY'        ,'Show1'),
(3,'Paris'     ,'Show2'),
(4,'Madrid'    ,'Show3'),
(5,'Madrid'    ,'Show3'),
(6,'NY'        ,'Show2'),
(7,'NY'        ,'Show1'),
(8,'Paris'     ,'Show2');   


 SELECT x.*
      , z.total
   FROM my_table x
   JOIN
      ( SELECT city, MAX(id) max_id FROM my_table GROUP BY city ) y
     ON y.city = x.city
    AND y.max_id = id
   JOIN (SELECT city, performance, COUNT(*) total FROM my_table GROUP BY city,performance) z
     ON z.city = x.city 
    AND z.performance = x.performance;

+----+--------+-------------+-------+
| id | city   | performance | total |
+----+--------+-------------+-------+
|  5 | Madrid | Show3       |     2 |
|  7 | NY     | Show1       |     2 |
|  8 | Paris  | Show2       |     2 |
+----+--------+-------------+-------+

在mysql中有一种超简单的方法:

SELECT * FROM (
    SELECT 
       city, 
       `show`, 
       count(id)  
    FROM 
       showTable 
    GROUP BY 
       city,`show` 
    ORDER BY 
       count(id) 
    DESC
) as temp 
GROUP BY 
  city

之所以可行,是因为在mysql中,您不允许汇总非分组依据列,在这种情况下,mysql只会返回第一行。 解决方案是首先对数据进行排序,以使得对于每个组,您想要的行都排在第一位,然后对要为其提供值的列进行分组(在本例中为city )。

请注意,对INNER查询进行排序非常重要。 否则顺序是不确定的,因此使用不带聚合的GROUP BY (在外部查询上)将不时返回另一行。 (如果在同一城市中两个节目的计数相等,您也将面临这一问题-有时它将返回“ showX”,有时返回“ showY”)

http://sqlfiddle.com/#!9/0b887/7

(在测试查询之后,我在这里找到了一个写得很好的语句,基本上是相同的问题-因此无需编写自己的语句: 获取每个分组的SQL结果的最大值的记录

ps .:如果您检查此提琴: http ://sqlfiddle.com/#!9/7a9be9/1-TESTTOWN将不时在show1和show2之间交替。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM