是否可以在聚合上使用子查询IN子句?

时间:2016-03-27 04:44:05

标签: mysql

所以我有以下常规查询:

SELECT 
    someCol, 
    COUNT(*), 
    GROUP_CONCAT(myTableID SEPARATOR ',') 
FROM myTable 
GROUP BY someCol

我想在子查询的IN子句中使用第三列中的myTableID列表。以下非工作查询说明了这一点:

# this does not work
SELECT
    someCol,
    COUNT(*),
    (    SELECT COUNT(mySubTable.*) 
         FROM mySubTable 
         WHERE mySubTable.foreignID IN GROUP_CONCAT(myTable.myTableID SEPERATOR ',')
    ) AS FOREIGN_COUNT
FROM myTable GROUP BY someCol

IN GROUP_CONCAT()部分不起作用,因为GROUP_CONCAT()只返回带逗号的字符串,而不是实际的id列表或子查询。

我的问题是,是否可以将myTableID的聚合列表用作子查询的IN子句的一部分?

1 个答案:

答案 0 :(得分:1)

使用'SUM'函数做这样的任务:

SELECT 
    someCol, 
    COUNT(*), 
    GROUP_CONCAT(myTableID SEPARATOR ','),
    SUM( 
         ( select COUNT(*) FROM mySubTable
           WHERE mySubTable.foreignID = myTable.myTableId )
        )
FROM myTable 
GROUP BY someCol;