SQL获取行等于某值的最大列数

时间:2018-11-09 03:53:51

标签: mysql sql

如果我的表格有3列:

Date | Name  | Num
oct1 | Bob   | 2
oct2 | Zayne | 1   
oct1 | Test  | 5    
oct2 | Apple | 7

我要检索NumMAX

的行
WHERE Date = oct1 or Date = oct2

所以我希望结果是:

oct1 Test 5
oct2 Apple 7

最好使用MYSQL。但是也给出SQL答案。谢谢。

5 个答案:

答案 0 :(得分:2)

您可以在下面使用相关子查询尝试

select * from tablename a 
 where num in (select max(num) from tablename b where a.date=b.date)
 and date in ('oct1', 'oct2')

答案 1 :(得分:1)

您可以尝试正确使用子查询

模式(MySQL v5.7)

CREATE TABLE T(
   Date VARCHAR(50),
   Name  VARCHAR(50), 
  Num INT
);



INSERT INTO T VALUES ('oct1','Bob',2);
INSERT INTO T VALUES ('oct2','Zayne',1);
INSERT INTO T VALUES ('oct1','Test',5);
INSERT INTO T VALUES ('oct2','Apple',7);

查询#1

SELECT *
FROM T t1
WHERE Num = (SELECT MAX(Num) FROM T tt WHERE t1.Date = tt.Date)
AND 
     t1.Date in ('oct1','oct2')


| Date | Name  | Num |
| ---- | ----- | --- |
| oct1 | Test  | 5   |
| oct2 | Apple | 7   |

View on DB Fiddle

答案 2 :(得分:1)

听起来您想要此查询:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT Date, MAX(Num) AS max_num
    FROM yourTable
    WHERE Date IN ('oct1', 'oct2')
    GROUP BY Date
) t2
    ON t1.Date = t2.Date AND t1.Num = t2.max_num
WHERE t1.Date IN ('oct1', 'oct2');

顺便说一句,您应该认真考虑将适当的日期数据存储在MySQL的实际日期或日期时间列中。看来您现在只是存储文本,很难使用。

答案 3 :(得分:0)

您可以如下使用关联子查询

generating Query

Fiddle link

 SELECT *
 FROM T t1
 WHERE Num = (SELECT MAX(Num) FROM T t2 WHERE t2.Date = t1.Date)

答案 4 :(得分:0)

在您寻求标准方法的地方:到目前为止给出的所有答案均符合SQL标准。标准SQL中的另一种可能方法是使用窗口函数。但是,只有MySQL从版本8开始才具有此功能。

select date, name, num
from
(
  select date, name, num, max(num) over (partition by date) as max_num
  from mytable
) analyzed
where num = maxnum
order by date;

这只会读取一次表,这可以(但不一定可以)加快查询速度。