SQL 选择列有一定长度和最大值的行

问题描述

Column_A Column_B Column_C
值 1 111A001 某个值 1
值 1 111A002 某些值 2
值 2 112A001 某些值 3
值 2 112A002 某些值 4
值 2 112A003 某些值 5
值 2 112A004 某些值 6
值 3 115A001 某些值 7
值 3 115A002 一些值 8
值 3 115A003 某些值 9
值 4 117A 一些值 10

大家好,

我有一个关于 sql 查询的问题。

从上表中,我想得到如下输出

Column_A Column_B Column_C
值 1 111A002 某个值 2
值 2 112A004 某些值 6
值 3 115A003 某些值 9

未选择值 4,因为在“A”之后的 Column_B 中没有任何内容或没有 3 位数。正如您在顶部表格中看到的,值 1 在列 B、111A001 和 111A002 中有 2 个值。我要选择 111A002。值 2 在 B 列有 4 个值,112A001 - 112A004,我只想选择 112A004。所以关键是我想从 column_A 中的每个值中选择最高值(在 column_b 中)。

我尝试使用 max(column_B) 但它只显示值 4、117A、某些值 10。

如果标题不正确,我深表歉意。

解决方法

也许你正在寻找这样的东西:

select 
  Column_A,max(Column_B) as Column_B,max(Column_C) as Column_C
from d
where length(substring(Column_B,locate('A',Column_B) + 1)) >= 3
group by Column_A
,
select column_a,max(column_b),max(column_c) /* Depends if you want max of column_c or column c value corresponding to the max of column_b - Question wasn't very clear */
from table
where column_b not like '%A___' /* Because you said - "Value 4 is not selected because in Column_B after 'A' there is nothing or it didn't have 3 digit." */
group by column_a

如果您确定,您可以使用它,“A”之后总会有 3 位数字,如果“A”之前的 3 位数字是 ___A%(这也可能是正确的,根据您发布的数据)

%A% 可能不适合您,因为它还会考虑以“A”结尾的字符串;而你在“A”之后需要一些东西

如果您确定字符串将包含 X 个字符,则最好使用 length(column_b) = 7 之类的函数。 不确定您使用的是哪个数据库。所以功能可能不同。一些数据库有 CHAR_LENGTH() 或 LEN()

编辑:只是澄清 ___ 是 3 个下划线。想澄清一下,因为它看起来像一条大线

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...