sql - 没有join怎么写SQL查询?

标签 sql google-bigquery

最近在面试的时候有人问我一个问题:如果我有一个像下面这样的表:

enter image description here

要求是:每天有多少订单和多少发货(基于日期列)——输出需要是这样的:

enter image description here

我写了下面的代码,但是面试官让我写一个没有JOIN和UNION的SQL查询,实现相同的输出。

SELECT 
    COALESCE(a.order_date, b.ship_date), orders, shipments 
FROM
    (SELECT 
         order_date, COUNT(1) AS orders 
     FROM 
         table 
     GROUP BY 1) a
FULL JOIN 
    (SELECT
         ship_date, COUNT(1) AS shipments 
     FROM table) b ON a.order_date = b.ship_date

这可能吗?各位大大可以指点一下吗?

最佳答案

您可以使用 UNIONGROUP BY 进行条件聚合,如下所示:

SELECT DATE_, 
       COUNT(CASE WHEN FLAG = 'ORDER' THEN 1 END) AS ORDERS,
       COUNT(CASE WHEN FLAG = 'SHIP' THEN 1 END) AS SHIPMENTS
 FROM (SELECT ORDER_DATE AS DATE_, 'ORDER' AS FLAG FROM YOUR_TABLE
       UNION ALL
       SELECT SHIP_DATE AS DATE_, 'SHIP' AS FLAG FROM YOUR_TABLE) T

关于sql - 没有join怎么写SQL查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65214347/

相关文章:

sql - 将 SQL 列转置为行

google-bigquery - 日表与时间分区上的通配符

mysql - 从另一个表中选择具有最大时间戳的记录

php - 选择更好的结果匹配

sql - 使用 DVCS [Mercurial] 将我的数据库置于版本控制之下

缓存 bigquery 查询

indexing - Bigquery : Find the index at which a specified element is first found within an array

mysql - 需要帮助制定 SQL 查询

google-bigquery - 您可以在 Google Big Query 中使用带空格的字段别名吗

Firebase BigQuery 服务器偏移时间