2015-03-10 3 views
0

У меня есть таблица вроде этого:MySQL GROUP_CONCAT дважды в подзапрос DISTINCT

title name 
1 ADAM SMITH 
1 JACK SMITH 
1 ROBERT ABADI 
2 JACK SMITH 
2 JAMES ANDERSON 
3 JACK SMITH 

Когда я называю данные с запросом выглядит

SELECT title, name, group_concat(name) as gname 
FROM sample 
GROUP BY title 

Результат:

1 ADAM SMITH ADAM SMITH,JACK SMITH,ROBERT ABADI 
2 JACK SMITH JACK SMITH,JAMES ANDERSON 
3 JACK SMITH JACK SMITH 

Теперь, Я хочу снова сгруппировать по имени. поэтому я вызываю этот запрос, и результаты следуют.

SELECT title, name, group_concat(distinct gname) 
FROM 
(
SELECT title, name, group_concat(name) as gname 
FROM sample 
GROUP BY title 
) sub 
GROUP BY sub.name 


1 ADAM SMITH ADAM SMITH,JACK SMITH,ROBERT ABADI 
2 JACK SMITH JACK SMITH,JAMES ANDERSON,JACK SMITH 

Но я не хочу иметь «JACK SMITH» дважды на последней колонке.

Я знаю причину, потому что первые group_concat() результаты - это строка, которая не может применяться с 'DISTINCT'.

Любые предложения приветствуются.

+0

Ваш первый запрос не имеет смысла. Столбец 'name' - это просто произвольно выбранное имя из группы' title', почему бы вам тогда захотеть сгруппироваться? – Barmar

+0

Я хочу знать, кому принадлежит (автор) тот же заголовок (paper). Поэтому первый запрос отобразит gname (соавтор). Эта таблица и данные являются просто образцом. В таблице указаны первая, средняя, ​​фамилия и название. Поэтому мы хотели бы знать первого соавтора каждой статьи. Это имеет смысл больше? Спасибо @Barmar – Karl

+0

Но вы получите совершенно разные результаты в зависимости от того, выбирает ли подзапрос Джек Смит или Джеймс Андерсон в качестве автора заголовка 2. – Barmar

ответ

1

Используйте JOIN получить соавтор:

SELECT s1.name, GROUP_CONCAT(DISTINCT s2.name) 
FROM sample AS s1 
JOIN sample AS s2 ON s1.title = s2.title 
GROUP BY s1.name 

DEMO

Если вы не хотите, чтобы показать автор как соавтор самих себя, добавить AND s1.name != s2.name условию ON.

+0

[ссылка] (http://www.sqlfiddle.com/#!9/6765c/1) Я хочу знать количество общих авторов. Вы можете увидеть ссылку и ответить на нее? – Karl

+0

Добавить 'COUNT (отличное имя s2.name) AS num'? – Barmar

+0

обновил SQLfiddle [ссылка] (http://www.sqlfiddle.com/#!9/eb2cf/1) Не количество соавторов, а общих соавторов. Посмотрите на «JACK S SMITH». У него нет соавторов вместе с JACK SMITH. Можем ли мы продолжить эту дискуссию в чате, если возможно? Может быть, мы могли бы лучше объяснить чат. Спасибо – Karl

Смежные вопросы