使用Group By 3 first varchars选择查询

时间:2014-07-30 06:08:06

标签: php mysql sql

我想做一个SELECT查询哪个组由3个第一个varchars ond显示每个的onces。例如表“tblanimals”:

id      name   age
--      ----   ---
1       DOG1   10
2       DOG2   12
3       DOG3   14
4       CAT1   16
5       CAT2   18

输出应为:

DOG
CAT

之后我需要创建另一个(内部循环)简单查询来显示我们上次查询的每个结果的详细信息:

DOG   DOG1   10
      DOG2   12
      DOG3   14
CAT   CAT1   16
      CAT2   18

10X

3 个答案:

答案 0 :(得分:1)

您可以使用 SUBSTR()

对此进行分组
select SUBSTR(name,1,3) as n from test group by n;

DEMO

你想要的结果:

select SUBSTR(name,1,3) as n,id,name,age from test;

DEMO

答案 1 :(得分:0)

此查询可以帮助您:

小提琴here

select 
(
case i.rank
when 1 then i.subname
else '' end
) groupname,
i.name,i.age
from

 (SELECT SUBSTRING(`NAME`,1,3)AS SUBNAME, t.name,t.AGE ,

       ( 
            CASE SUBSTRING(`NAME`,1,3) 
            WHEN @curType 
            THEN @rownum := @rownum + 1 
            ELSE @rownum := 1 AND @curType := (SUBSTRING(`NAME`,1,3)) END
          )+1 AS rank

  FROM TEST t, 
       (SELECT @rownum := 0, @curType := '') r
  ) i

<强>输出:

GROUPNAME | NAME |  AGE
DOG       | DOG1 |  10
          | DOG2 |  12
          | DOG3 |  14
CAT       | CAT1 |  16
          | CAT2 |  18

查询解释

innerQuery(i)用于排名并根据动物名称的前3个字符获取rownumbers。仅当rownumber = 1时,使用case语句显示动物名称。如果rownumber不是1,则显示空白字符。

答案 2 :(得分:0)

SELECT SUBSTRING(name,1,3) AS first3Char, name,age FROM test2
GROUP BY first3Char,fName,lName

请检查以上查询是否符合您的目的。