按功能分组获取多个表记录的计数

时间:2018-04-16 07:19:13

标签: mysql

我有2个表:priority_listpriority_list_delete

我想在一行中获得以下数据:

1)这两个表记录的总和

2)个别表记录的计数

3)priority_list_delete表的计数记录了类别

这是我到目前为止所做的:

SELECT
(SELECT COUNT(*) FROM priority_list)+(SELECT COUNT(*) from 
priority_list_delete) as tot_count,
(SELECT COUNT(*) FROM priority_list) as prior_cnt,
(SELECT COUNT(*) FROM priority_list_delete) as prior_del_cnt

上面的查询返回表的计数但是当我将下面的查询与上面的查询合并时,它会抛出一个错误:

(SELECT category, COUNT(*) FROM priority_list_delete group by category)

我想,有一些语法错误,我无法解决它,而且我不知道如何获得类别名称将是列名称的计数记录类别。

示例格式:

 tot_count| prior_cnt| prior_del_cnt| ST   | OBC
 ---------|----------|--------------|------|------
 920      | 893      | 27           | 64   | 100

这里ST和OBC是类别。

任何帮助都将不胜感激。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为您确切的所需输出可能很难,因为类别列的数量是动态的。但我们可以尝试跨行报告类别:

SELECT category, cnt
FROM
(
    SELECT category, COUNT(*) AS cnt, 0 AS pos
    FROM priority_list_delete
    GROUP BY category
    UNION ALL
    SELECT 'prior_cnt', COUNT(*), 1 FROM priority_list
    UNION ALL
    SELECT 'prior_del_cnt', COUNT(*), 2 FROM priority_list_delete
    UNION ALL
    SELECT 'tot_count', (SELECT COUNT(*) FROM priority_list) +
        (SELECT COUNT(*) FROM priority_list_delete), 3
) t
ORDER BY pos, category;

这会使输出看起来像:

category      | cnt
ST            | 64
OBC           | 100
prior_cnt     | 893
prior_del_cnt | 27
tot_count     | 920