鱼C论坛

 找回密码
 立即注册
查看: 137|回复: 7

[已解决]postgres sql

[复制链接]
发表于 2024-7-4 11:16:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如何统计 table1  table2  table3 三个表的行数并将三个表行总数加起来
最佳答案
2024-7-4 11:37:58
被注册了怎么办 发表于 2024-07-04 11:37
额,想要结果是 既能分别显示这三个表的行数,又能显 ...


OK,鱼油,我明白你的意思了!你希望的是在一个查询中既能分别列出每个表的行数,又能显示总行数。好比你想要一个清单,上面既有各个鱼缸的鱼数量,又能看到所有鱼加起来的总数。

我们可以通过使用 CTE 和 `UNION ALL` 的组合来实现这个目标,并在最后汇总总行数。以下是具体的SQL查询:
-- 使用 CTE 统计每个表的行数并汇总
WITH count_table AS (
    SELECT 'table1' AS tablename, COUNT(*) AS count FROM table1
    UNION ALL
    SELECT 'table2', COUNT(*) FROM table2
    UNION ALL
    SELECT 'table3', COUNT(*) FROM table3
),
total_count AS (
    SELECT SUM(count) AS total FROM count_table
)
-- 查询出每个表的行数以及总行数
SELECT * FROM count_table
UNION ALL
SELECT 'TOTAL', total FROM total_count;

解释一下这个查询:
1. 定义了一个公共表表达式(CTE)名为 `count_table`,它分别统计 `table1`, `table2`, 和 `table3` 的行数,并返回每个表的名字和对应的行数。
2. 然后定义了另一个 CTE 名为 `total_count`,它计算 `count_table` 中所有行数的总和。
3. 最后,我们查询 `count_table` 中的所有内容,并通过 `UNION ALL` 加上总行数。这里我们人为地给总行数的那一行命名为 `'TOTAL'`,这样结果就既包含了每个表的行数,也包含了总行数。

运行这个查询,你会得到以下结果格式:
tablename | count
-----------+-------
 table1    | X
 table2    | Y
 table3    | Z
 TOTAL     | X + Y + Z

希望这个解决方案能让你满意,就像一次丰盛的烧烤大餐一样!如果还有其他问题或者需求,尽管继续告诉我,我会毫不犹豫地为你解答!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-4 11:21:06 | 显示全部楼层
嗨,鱼油!这个问题就像是在数鱼缸里的鱼,只不过这次是数数据库里的行。

首先,我们需要分别统计 `table1`、`table2` 和 `table3` 的行数。然后,我们再把这几个数字加在一起,就好像是把不同鱼缸里的鱼数起来放到一个桶里。

下面是怎么用 SQL 来搞定这个问题的:
-- 统计 table1 的行数
SELECT COUNT(*) AS table1_count FROM table1;

-- 统计 table2 的行数
SELECT COUNT(*) AS table2_count FROM table2;

-- 统计 table3 的行数
SELECT COUNT(*) AS table3_count FROM table3;

-- 将三个表的行数加起来
SELECT 
    (SELECT COUNT(*) FROM table1) +
    (SELECT COUNT(*) FROM table2) +
    (SELECT COUNT(*) FROM table3) AS total_count;

每一步都很直观,像是在捕鱼数鱼一样。一开始我们分别统计了每个表的行数,然后通过最后一个查询将这些结果加在一起,得到总行数。

希望这样解释对你有帮助!如果还有疑问的话,记得随时抛过来,我会继续为你解答,让学习 SQL 像吃鱼一样轻松快乐!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-4 11:24:34 | 显示全部楼层
FishC 发表于 2024-7-4 11:21
嗨,鱼油!这个问题就像是在数鱼缸里的鱼,只不过这次是数数据库里的行。

首先,我们需要分别统计 `tabl ...


可以将这些写到一个sql吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-4 11:24:46 | 显示全部楼层
被注册了怎么办 发表于 2024-07-04 11:24
可以将这些写到一个sql吗
SELECT COUNT(*)
FROM dat ...


非常高兴再次见到你,鱼油!你的思路基本上是对的,但是我们需要做一些小调整来确保 SQL 能顺利执行。这里我们会用 `UNION ALL` 来把多个表中的行数放在一起,然后再用一个公共表表达式(CTE)来计算总数。

让我们来一步步优化这个 SQL 语句:
-- 使用 CTE 统计每个表的行数并汇总
WITH count_table AS (
    SELECT COUNT(*) AS count FROM datacollection.cm_lte_base
    UNION ALL
    SELECT COUNT(*) FROM datacollection.cm_lte_sonpolicyeslte_zte
    UNION ALL
    SELECT COUNT(*) FROM datacollection.cm_nr_gnodeb_hw
)
SELECT SUM(count) as total_count FROM count_table;

简要解释一下:
1. 我们定义了一个公共表表达式(CTE),命名为 `count_table`,其中每个子查询都会返回一个名为 `count` 的列,代表每个表的行数。
2. 使用 `UNION ALL` 把三个子查询的结果合并到一起,这样每个查询的结果都会保留。
3. 最后,我们在外部查询中使用 `SUM()` 函数来计算所有行数的总和,并命名结果列为 `total_count`。

这相当于先把三个表的行数都捞出来,然后再用一个大秤把这些行数加起来,得到总行数。这样你就能一目了然地看到所有表加起来的总行数了!

希望这样修改后的 SQL 能完美解决你的问题,让数行数变得像数炸虾片一样简单!如果还有其他疑问,游过来继续问吧!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-7-4 11:35:06 | 显示全部楼层
FishC 发表于 2024-7-4 11:24
非常高兴再次见到你,鱼油!你的思路基本上是对的,但是我们需要做一些小调整来确保 SQL 能顺利执行。 ...

可以把这两个sql合并到一个上去吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-4 11:35:53 | 显示全部楼层
被注册了怎么办 发表于 2024-07-04 11:35
可以把这两个sql合并到一个上去吗


好的,鱼油!我明白你的需求。你想要的是一个SQL查询,既能分别显示每个表的行数,又能显示总行数。我们可以做到这一点,就像一条鱼翅同时满足了鲜美和营养两大需求!

这里是怎么写的:
-- 使用 CTE 统计每个表的行数并汇总
WITH count_table AS (
    SELECT 'table1' AS tablename, COUNT(*) AS count FROM table1
    UNION ALL
    SELECT 'table2', COUNT(*) FROM table2
    UNION ALL
    SELECT 'table3', COUNT(*) FROM table3
)
-- 查询出每个表的行数以及总行数
SELECT 
    tablename,
    count,
    (SELECT SUM(count) FROM count_table) AS total_count
FROM count_table;

解释一下这个查询:

1. 我们定义了一个公共表表达式(CTE)名为 `count_table`。
2. 在 `count_table` 内部,我们使用 `UNION ALL` 将每个表的行数计算出来,并且将表名也一起返回。这样我们就可以知道每个行数对应的表名。
3. 在外部查询中,我们选择所有 `count_table` 中的记录,并且在每一行后面加上一个总行数,这个总行数通过再次查询 `count_table` 并对其 `count` 列进行求和得出。

这样你就可以在一个结果集中看到每个表的行数,同时也可以看到总行数,就像一个豪华的全家桶里既有鸡翅又有鸡腿,还给你算好了所有的卡路里!

希望这能完美解决你的问题,如果还有别的需求或疑问,就继续抛过来吧!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-7-4 11:37:23 | 显示全部楼层
FishC 发表于 2024-7-4 11:35
好的,鱼油!我明白你的需求。你想要的是一个SQL查询,既能分别显示每个表的行数,又能显示总行数。我 ...

额,想要结果是 既能分别显示这三个表的行数,又能显示总行数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-4 11:37:58 | 显示全部楼层    本楼为最佳答案   
被注册了怎么办 发表于 2024-07-04 11:37
额,想要结果是 既能分别显示这三个表的行数,又能显 ...


OK,鱼油,我明白你的意思了!你希望的是在一个查询中既能分别列出每个表的行数,又能显示总行数。好比你想要一个清单,上面既有各个鱼缸的鱼数量,又能看到所有鱼加起来的总数。

我们可以通过使用 CTE 和 `UNION ALL` 的组合来实现这个目标,并在最后汇总总行数。以下是具体的SQL查询:
-- 使用 CTE 统计每个表的行数并汇总
WITH count_table AS (
    SELECT 'table1' AS tablename, COUNT(*) AS count FROM table1
    UNION ALL
    SELECT 'table2', COUNT(*) FROM table2
    UNION ALL
    SELECT 'table3', COUNT(*) FROM table3
),
total_count AS (
    SELECT SUM(count) AS total FROM count_table
)
-- 查询出每个表的行数以及总行数
SELECT * FROM count_table
UNION ALL
SELECT 'TOTAL', total FROM total_count;

解释一下这个查询:
1. 定义了一个公共表表达式(CTE)名为 `count_table`,它分别统计 `table1`, `table2`, 和 `table3` 的行数,并返回每个表的名字和对应的行数。
2. 然后定义了另一个 CTE 名为 `total_count`,它计算 `count_table` 中所有行数的总和。
3. 最后,我们查询 `count_table` 中的所有内容,并通过 `UNION ALL` 加上总行数。这里我们人为地给总行数的那一行命名为 `'TOTAL'`,这样结果就既包含了每个表的行数,也包含了总行数。

运行这个查询,你会得到以下结果格式:
tablename | count
-----------+-------
 table1    | X
 table2    | Y
 table3    | Z
 TOTAL     | X + Y + Z

希望这个解决方案能让你满意,就像一次丰盛的烧烤大餐一样!如果还有其他问题或者需求,尽管继续告诉我,我会毫不犹豫地为你解答!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-8 09:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表