如何 select 基于多个条件的值

how to select a value based on multiple criteria

我正在尝试 select 基于一些专有数据的一些值,我只是将变量更改为参考房价。

我正在尝试获取以出价或要价出售的房屋的总出价,出价低于 15 且出价 * 售价低于 5,000,000。

然后我想获得每个社区每天的报价总数,但我得到的是所有日期和数据集中所有日期的总报价。

我当前的查询是这样的:

SELECT DISTINCT(neighborhood),
DATE(date_of_sale),
(SELECT SUM(offers) 
   FROM `big_query.a_table_name.houseprices` 
   WHERE ((offers * accepted_sale_price < 5000000) 
AND (offers < 15) 
AND (house_bid = sale_price OR 
      house_ask = sale_price))) as bid_ask_off,    
(SELECT SUM(offers) 
 FROM `big_query.a_table_name.houseprices`) as 
total_offers,
FROM `big_query.a_table_name.houseprices`
GROUP BY neighborhood, DATE(date_of_sale) LIMIT 100

我期待这样的结果,日期在整个过程中重复为 d1、d2、d3 等:

但我收到了

我知道我尝试 select / 组存在一些固有问题,但我不确定要 google 或要查看哪些教程执行此操作的顺序。

它查询了相当多的数据,我想降低成本,因为我已经在查询上积累了一笔小账单。

非常感谢任何帮助或建议,我希望我提供了足够的信息。

这是一个示例数据框。

neighborhood    date_of_sale    offers  accepted_sale_price house_bid   house_ask
bronx           4/1/2022        3       323                 320 323
manhattan       4/1/2022        4       244                 230 244
manhattan       4/1/2022        8       856                 856 900
queens          4/1/2022        15      110                 110 135
brooklyn        4/2/2022        12      115                 100 115
manhattan       4/2/2022        9       255                 255 275
bronx           4/2/2022        6       330                 300 330
queens          4/2/2022        10      405                 395 405
brooklyn        4/2/2022        4       254                 254 265
staten_island   4/3/2022        2       442                 430 442
staten_island   4/3/2022        13      195                 195 225
bronx           4/3/2022        4       650                 650 690
manhattan       4/3/2022        2       286                 266 286
manhattan       4/3/2022        6       356                 356 400
staten_island   4/4/2022        4       361                 361 401
staten_island   4/4/2022        5       348                 348 399
bronx           4/4/2022        8       397                 340 397
manhattan       4/4/2022        9       333                 333 394
manhattan       4/4/2022        11      392                 325 392

我认为这就是您所需要的。
当我们按社区分组时,我们不需要 DISTINCT。
我们直接从 table 中获取 total_offers 的 sum(offers) 并从我们加入的 sub-query 中出价,以便按社区分组。

SELECT 
  h.neighborhood,
  DATE(h.date_of_sale) AS date_,
  s.bids AS bid_ask_off,    
  SUM(h.offers) AS total_offers,
FROM 
  `big_query.a_table_name.houseprices` h
  LEFT JOIN
  (SELECT
     neighborhood,
     SUM(offers) AS bids
   FROM 
      `big_query.a_table_name.houseprices` 
   WHERE offers * accepted_sale_price < 5000000
   AND offers < 15 
   AND (house_bid = sale_price OR 
      house_ask = sale_price)
   GROUP BY neighborhood) s 
ON h.neighborhood = s.neighborhood
GROUP BY 
  h.neighborhood, 
  DATE(date_of_sale),
  s.bids
LIMIT 100;

或以下对初始查询进行了更多修改,但可能更符合您的需要。

SELECT 
  h.neighborhood,
  DATE(h.date_of_sale) AS date_,
  s.bids AS bid_ask_off,    
  SUM(h.offers) AS total_offers,
FROM 
  `big_query.a_table_name.houseprices` h
  LEFT JOIN
  (SELECT
     date_of_sale dos,
     neighborhood,
     SUM(offers) AS bids
   FROM 
      `big_query.a_table_name.houseprices` 
   WHERE offers * accepted_sale_price < 5000000
   AND offers < 15 
   AND (house_bid = sale_price OR 
      house_ask = sale_price)
   GROUP BY 
      neighborhood,
      date_of_sale) s 
ON h.neighborhood = s.neighborhood
AND h.date_of_sale = s.dos
GROUP BY 
  h.neighborhood, 
  DATE(date_of_sale),
  s.bids
LIMIT 100;