[英]How would I include 0 values in a Spark Scala SQL Query?
我正在嘗試遍歷數據框並計算某個日期在特定日期范圍內出現的次數。 代碼工作正常。 唯一的問題是,如果它在給定的日期范圍內沒有找到任何日期,則它不會在結果數據框中包含值為 0 的日期范圍。 讓我給你看一個例子:
這是我的輸入數據框,
這是我的 bin 范圍數據框,
我正在使用的 SQL 查詢是這樣的:
val countSql = """
SELECT concat(date_format(c.st_dt,'MM-dd-yyyy'),' -- ',date_format(c.end_dt,'MM-dd-yyyy')) as date_range, c.bin_count
FROM (
(SELECT
b.st_dt, b.end_dt, count(1) as bin_count
FROM
(select to_date(input_date,'MM-dd-yyyy') as date_input , * from input_table) a
left join
(select to_date(start_date,'MM-dd-yyyy') as st_dt, to_date(end_date,'MM-dd-yyyy') as end_dt from bin_range ) b
on
a.date_input >= b.st_dt and a.date_input < b.end_dt
group by 1,2) ) c"""
代碼現在的方式,它會返回一個空的數據幀,因為輸入數據幀中的任何日期都沒有落在提供的 bin 范圍內。 但是如果沒有找到,我希望每個 bin 范圍都有一行,並在它旁邊有一個相應的 0 值。
如果您希望所有范圍都出現在最終結果中,則需要在連接的左側有range_table
。 此外,您可以將其簡化為這樣的:
SELECT CONCAT(DATE_FORMAT(r.st_dt,'MM-dd-yyyy'),' -- ', DATE_FORMAT(r.end_dt,'MM-dd-yyyy')) AS date_range,
COUNT(i.date_input) AS bin_count
FROM bin_range r
LEFT JOIN input_table i
ON i.date_input >= r.st_dt AND i.date_input < r.end_dt
GROUP BY CONCAT(DATE_FORMAT(r.st_dt,'MM-dd-yyyy'),' -- ', DATE_FORMAT(r.end_dt,'MM-dd-yyyy'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.