MySQL 计数???帮助查询

标签 mysql 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
                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/

相关文章:

php - 将日期从字符串转换为 PDO 中的对象

php - MYSQL order by - 遵循一种模式

sql - 在 PostgreSQL 查询中从时间戳中省略 00 分钟

mysql - Apache Mesos、MESOS-DNS、MARATHON 和 Docker

sql - 查询不像sql

mysql - Sql 使用比 from-in to-in 命令更小的命令

python - 当 chunksize = 100 时,大(600 万行)pandas df 导致内存错误 `to_sql `,但可以轻松保存 100,000 个没有 chunksize 的文件

mysql - 使用 Sequelize 和 MySQL 方言生成模型

mysql - insert-update pdo mysql 查询并获取最后插入的 id(如果需要)

mysql - 在 phpmyadmin 中执行选择查询时,如何为带有自定义注释的字段指定别名