我有以下查询:
select AP.paper_id as id,
concat(A.organization, A.country)as org,
group_concat(SUBSTR(first_name, 1, 1), '. ', last_name SEPARATOR ', ') as initial
from authors A
inner join authors__papers AP ON A.author_id = AP.author_id
join tmp_orgs ORGS ON ORGS.paper_id = AP.paper_id
where ORGS.organization=A.organization AND
AP.is_contact_author < 1
group by A.organization, AP.paper_id
order by AP.paper_id, idx
它输出的数据类似于:
id org initial
1001 org1 J. Doe
1001 org1 J.Smith
1003 org2 A. Doe
1004 org3 A. Smith
1004 org3 B. Doe
1006 org4 B. Smith
1007 org5 C. Doe
我需要的是第四列,它是按 paper_id 分组的所有组织的计数,因此结果如下所示:
id org initial org_count
1001 org1 J. Doe 2
1001 org1 J.Smith 2
1003 org2 A. Doe 1
1004 org3 A. Smith 2
1004 org3 B. Doe 2
1006 org4 B. Smith 1
1007 org5 C. Doe 1
我厌倦了添加子查询:
(SELECT COUNT(DISTINCT(organization)) as dcnt fromauthors A INNER JOINauthors__papers AP on AP.author_id = A.author_id where AP.is_contact_author < 1 AND paper_id = ??? GROUP BY paper_id) 作为 org_count
...但无法弄清楚如何为每行指定 paper_id (上面查询中的 ??? 。将其作为选择中的联接或列更好,还是真的很重要?我并不是真正的 SQL 专家,但需要它,因为我正在代替某人。任何帮助都将不胜感激!
最佳答案
你就快到了,试试这个:
SELECT
AP.paper_id AS id,
CONCAT(A.organization, A.country) AS org,
GROUP_CONCAT(SUBSTR(first_name, 1, 1), '. ', last_name SEPARATOR ', ') AS initial,
(
SELECT COUNT(DISTINCT(organization)) AS dcnt
FROM authors t1
INNER JOIN authors__papers t2 ON t2.author_id = t1.author_id
-- INNER JOIN tmp_orgs t3 ON t3.paper_id = t2.paper_id AND t3.organization = t1.organization
WHERE t2.is_contact_author < 1
) AS org_count
FROM authors A
INNER JOIN authors__papers AP ON A.author_id = AP.author_id
INNER JOIN tmp_orgs ORGS ON ORGS.paper_id = AP.paper_id
WHERE ORGS.organization = A.organization
AND AP.is_contact_author < 1
GROUP BY A.organization, AP.paper_id
ORDER BY AP.paper_id, idx
关于MySQL 计数???帮助查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38493377/