使用groupby函数获取多个表记录的计数

jk9hmnmh  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(285)

我有两张table: priority_list 以及 priority_list_delete 我想在一行中获取以下数据:
1) 这两个表记录的总和
2) 单个表记录的计数
3) 优先级计数\u列表\u按类别删除表记录
这就是我目前所做的:

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是分类。
任何帮助都将不胜感激。
提前谢谢。

c86crjj0

c86crjj01#

我认为你想要的输出可能很难做到,因为分类列的数量是动态的。但我们可以尝试跨行报告类别:

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

相关问题