我有2个表:priority_list
和priority_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是类别。
任何帮助都将不胜感激。
提前致谢。
答案 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