Group_concat包含第一个特定类型的列

时间:2014-03-26 04:09:20

标签: mysql sql

我的表是:

Parent_Child (Parent_SSN, Child_SSN)
Person (SSN, Name, age, sex)
School (Child_SSN, School_Name)

我想选择在特定学校'X'至少有一个孩子的父母(女性,男性)。我有一个工作查询,我的mysql查询是:

select group_concat(p.name) from person p,parentchild pc,school s 
where s.schoolname='X' and s.childssn=pc.childssn and p.ssn=pc.parentssn 
group by pc.childssn

这会将结果显示为parent(male,female),但我希望结果显示在(female,male) form中,如果我将其分组为parent.sex,则会在单个行中显示结果,而不会在单行中显示结果。我不在想法。

示例所需的输出:

name

Angela,Jim

输出上述现有查询:

name

Jim,Angela

4 个答案:

答案 0 :(得分:1)

此处为您Sql Fiddle

SELECT DISTINCT group_concat(p.name ORDER BY p.sex Asc) 
FROM Person p JOIN Parent_Child pc ON p.ssn=pc.Parent_SSN 
          JOIN School s  ON s.Child_SSN = pc.Child_SSN
WHERE s.School_Name='X' 
GROUP By pc.Child_SSN;

答案 1 :(得分:0)

试试这个,可以使用sort

 SELECT GROUP_CONCAT( p.name ORDER BY p.name DESC ) from person p,parentchild pc,school s 
where s.schoolname='X' and s.childssn=pc.childssn and p.ssn=pc.parentssn 
group by pc.childssn

答案 2 :(得分:0)

您可以通过以下方式在GROUP_CONCAT函数中使用ORDER BY:

试试这个

SELECT group_concat(DISTINCT p.name ORDER BY p.name Asc) 
FROM person p JOIN parentchild pc ON p.ssn=pc.parentssn 
              JOIN school s  ON s.childssn = pc.childssn
WHERE s.schoolname='X' 
GROUP By pc.childssn

请参阅http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function%5Fgroup-concat

答案 3 :(得分:0)

我设法在这里使用join获得结果是我的工作查询。

select * from (select distinct p.name from person p,parentchild pc,school s where s.schoolname='X' and s.childssn=pc.childssn and p.ssn=pc.parentssn and p.sex='F')q1 join (select distinct p.name from person p,parentchild pc,school s where s.schoolname='X' and s.childssn=pc.childssn and p.ssn=pc.parentssn and p.sex='M')q

我想知道是否可以按group_concat结果集中的特定条件对项目进行排序,这会影响它在group_concat结果集中的位置。