SQL GROUP BY(精确匹配)

时间:2015-09-23 11:24:50

标签: mysql sql

我一直在互联网上无处不在,找不到解决方案...... 目前我的SQL查询设置为“GROUP BY A”,因为它是产品规格列表。

List[Int]

我需要它分组(完全匹配)A,因为例如:

"SELECT A, B, C, ... FROM ... WHERE D>$variable AND E<$variable2 AND ... ... GROUP BY A";

^以上内容应分组,以便输出如下:

102001
102001
102001
102001
102001HS
102001HS
102001HS

^但是,目前使用“GROUP BY A”,它输出为:

102001
102001HS

这些是不同的部件号,但GROUP BY A在102001HS下分组102001,因此我的最终输出中没有102001的结果。

如果有人知道如何按照A的完全匹配分组,我将非常感激?非常感谢! (A是专栏)是SQL5.6.17

表格结构:

102001HS

3 个答案:

答案 0 :(得分:0)

看起来A列对所有这些记录都有相同的值(因为输出中只得到一个结果)。见下文(最后一个查询):

declare @tbl table (value varchar(10), a varchar(3))

insert into @tbl values ('102001','xyz')
insert into @tbl values ('102001','xyz')
insert into @tbl values ('102001','xyz')
insert into @tbl values ('102001','xyz')
insert into @tbl values ('102001HS','xyz')
insert into @tbl values ('102001HS','xyz')
insert into @tbl values ('102001HS','xyz')

select value, a from @tbl group by value, a

输出:

value     a
--------------
102001    xyz
102001HS  xyz

答案 1 :(得分:0)

要解决此问题,请先再次尝试查询,但完全不要使用GROUP BY子句。这将显示通过WHERE条件的行的详细信息。 (我怀疑你会发现它们都具有A列的相同值。)

接下来,请注意GROUP BY的非标准MySQL扩展。在标准GROUP BY中,您必须同时提及SELECTGROUP BY中的所有列,除非他们像MAX(C)GROUP_CONCAT(D)一样进行聚合。 https://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html如果您使用MySQL扩展,它可能会产生不可预测的结果。

答案 2 :(得分:0)

如果数字后面总是相同的两个字母,您可以使用此方法。

declare @extension varchar(10) = 'HS'
select * from (
   SELECT Replace(A, @extension, '') as A, B, C, ... FROM 
   ... WHERE D>$variable AND E<$variable2 AND ... ... GROUP BY A
) as t Group by t.A

但是,如果扩展字符串更随机,您可能希望查看是否可以使用

LEFT(A, 6)

仅保留前6个字符。 (这用来代替替换部分)