如何将这 6 个 SQL 查询组合在一起而不会出错?

问题描述 投票:0回答:4

我想将包含上述所有信息的 JOIN 语句放入 1 个查询而不是 6 个查询中。我尝试了几件事,但我总是遇到错误,尤其是:出现在所有 3 个数据集中的 member_casual 表的“名称列不明确”错误...我试着在网上寻找答案,但它们对我目前的知识来说太复杂了,对我的具体问题不起作用。

SELECT COUNT (member_casual)
FROM `test-project-355707.cyclistic_trips.01-23`
WHERE member_casual = "casual";
SELECT COUNT (member_casual)
FROM `test-project-355707.cyclistic_trips.01-23`
WHERE member_casual = "member";
SELECT COUNT (member_casual)
FROM `test-project-355707.cyclistic_trips.02-23`
WHERE member_casual = "casual";
SELECT COUNT (member_casual)
FROM `test-project-355707.cyclistic_trips.02-23`
WHERE member_casual = "member";
SELECT COUNT (member_casual)
FROM `test-project-355707.cyclistic_trips.03-23`
WHERE member_casual = "casual";
SELECT COUNT (member_casual)
FROM `test-project-355707.cyclistic_trips.03-23`
WHERE member_casual = "member";
sql google-bigquery pivot aggregate-functions
4个回答
0
投票

如果你想将六个查询合并为一个。你想用

UNION ALL

它将结合所有三个

Select
语句的结果

然后

Where
过滤
causal
member

SELECT '01-23' as month, member_casual, COUNT(*) as count
FROM test-project-355707.cyclistic_trips.01-23
WHERE member_casual IN ('casual', 'member')
GROUP BY month, member_casual
UNION ALL
SELECT '02-23' as month, member_casual, COUNT(*) as count
FROM test-project-355707.cyclistic_trips.02-23
WHERE member_casual IN ('casual', 'member')
GROUP BY month, member_casual
UNION ALL
SELECT '03-23' as month, member_casual, COUNT(*) as count
FROM test-project-355707.cyclistic_trips.03-23
WHERE member_casual IN ('casual', 'member')
GROUP BY month, member_casual

0
投票

要将所有这些查询合并为一个,您可以使用 UNION ALL 运算符合并多个 SELECT 语句的结果。您还可以向每个 SELECT 语句添加一个新列以标识数据的月份:

SELECT 'January' AS month, COUNT(member_casual) AS casual_count
FROM test-project-355707.cyclistic_trips.01-23
WHERE member_casual = 'casual'
UNION ALL
SELECT 'January' AS month, COUNT(member_casual) AS member_count
FROM test-project-355707.cyclistic_trips.01-23
WHERE member_casual = 'member'
UNION ALL
SELECT 'February' AS month, COUNT(member_casual) AS casual_count
FROM test-project-355707.cyclistic_trips.02-23
WHERE member_casual = 'casual'
UNION ALL
SELECT 'February' AS month, COUNT(member_casual) AS member_count
FROM test-project-355707.cyclistic_trips.02-23
WHERE member_casual = 'member'
UNION ALL
SELECT 'March' AS month, COUNT(member_casual) AS casual_count
FROM test-project-355707.cyclistic_trips.03-23
WHERE member_casual = 'casual'
UNION ALL
SELECT 'March' AS month, COUNT(member_casual) AS member_count
FROM test-project-355707.cyclistic_trips.03-23
WHERE member_casual = 'member';

这将返回一个包含四列的表:month,casual_count 表示该月的休闲旅行次数,member_count 表示该月的会员旅行次数。请注意,AS 关键字用于为列名分配别名。

如果需要统计总金额或者分别'casual'和'member',那么可以使用JOIN。


0
投票

您可以使用多个

case
子句和聚合函数
sum()
union all
来组合结果:

select '01-23' as dataset,
       sum(case when member_casual = "casual" then 1 else 0 end) as casual_count,
       sum(case when member_casual = "member" then 1 else 0 end) as member_count
from `test-project-355707.cyclistic_trips.01-23`
union all
select '02-23' as dataset,
       sum(case when member_casual = "casual" then 1 else 0 end) as casual_count,
       sum(case when member_casual = "member" then 1 else 0 end) as member_count
from `test-project-355707.cyclistic_trips.02-23`
union all
select '03-23' as dataset,
       sum(case when member_casual = "casual" then 1 else 0 end) as casual_count,
       sum(case when member_casual = "member" then 1 else 0 end) as member_count
from `test-project-355707.cyclistic_trips.03-23`

0
投票

您可以将三个数据集与

union all
结合起来,然后使用handy BQ函数进行条件计数
countif

select 
    countif(member_casual = 'casual') as cnt_casual,
    countif(member_casual = 'member') as cnt_member
from (
    select member_casual from `test-project-355707.cyclistic_trips.01-23`
    union all select member_casual from `test-project-355707.cyclistic_trips.02-23`
    union all select member_casual from `test-project-355707.cyclistic_trips.03-23`
) x
where member_casual in ('casual', 'member')

添加

WHERE
子句 might 如果您有两个以上的不同值,则可以帮助数据库优化查询。

这为您提供了一个包含一行和两列的结果集。如果您希望每个成员类型一行,我们可以

group by
代替:

select member_casual, count(*) cnt 
from (
    select member_casual from `test-project-355707.cyclistic_trips.01-23`
    union all select member_casual from `test-project-355707.cyclistic_trips.02-23`
    union all select member_casual from `test-project-355707.cyclistic_trips.03-23`
) x
where member_casual in ('casual', 'member')
group by member_casual
© www.soinside.com 2019 - 2024. All rights reserved.