在一个查询中选择不相关表中的列总和

63lcw9qa  于 2022-10-03  发布在  Mysql
关注(0)|答案(2)|浏览(118)

我有一些根本不相关的表格:

Books                          Apps                           Cars                       

Id     Views                   Id     Views                   Id     Views
------------                   ------------                   ------------
1      3                       4      5                       11      10
2      4                       5      100                     13      3
3      3                       6      5                       15      7

I want:

total_books    total_apps    total_cars
10             110           20

而不是3个单独的查询总和的视图,我希望有一个查询,我将获得每个表中的总和的视图

SELECT SUM(books.views), SUM(apps.views), SUM(cars.views) FROM books,apps,cars;

giving me NULL NULL NULL
j2cgzkjk

j2cgzkjk1#

您仍然需要多个选择,因为这些表是不相关的。

试试这个(信用到this answer):

SELECT * FROM (SELECT SUM(Views) as total_books from Books) as Books, (SELECT Sum(Views) as total_apps from Apps) as Apps, (SELECT Sum(Views) as total_cars from Cars) as Cars

screenshot of my test

可能有更好/更好的方法来实现这一点,但至少这是一个开始。

编辑

运行您的示例

如果我运行与您相同的命令,结果将被乘以9(参见here)。

最可能出现的情况--空表

我刚意识到你的结果是空的。因此,正如其他人所指出的,你的table必须是空的。在我的示例中,我将视图字段创建为NOT NULL,这样我就不会遇到您所做的事情。

see example here

编辑2

提供有关在何处运行查询的其他信息将非常有用。您是否会意外地针对不同版本的表(可能是软件中的不同上下文窗口)运行查询?

stszievb

stszievb2#

SELECT 
    (SELECT SUM(Views) from Books) as Books,
    (SELECT Sum(Views) from Apps)  as Apps,
    (SELECT Sum(Views) from Cars)  as Cars ;

(不需要“派生”表。)

有些数据库(MySQL除外)的末尾可能需要FROM DUAL

相关问题