Databricks SQL查询问题:餐厅订单数最高账户ID结果不符
问题诊断与解决
核心错误点
你的SQL语句中,count(order_origin = "RESTAURANT")的用法不符合统计需求:
- 在Databricks SQL中,
order_origin = "RESTAURANT"会返回布尔值(true/false),而count()函数会统计所有非NULL值——不管是true还是false都会被计入,最终结果其实是该账户的全部订单总数,而非仅餐厅订单数。
正确的SQL写法
需要通过条件聚合来精准统计餐厅订单数,两种常用有效写法:
写法1:SUM+CASE组合
SELECT account_id, SUM(CASE WHEN order_origin = 'RESTAURANT' THEN 1 ELSE 0 END) AS Order_From_Restaurant FROM ord_sample GROUP BY account_id ORDER BY Order_From_Restaurant DESC LIMIT 10
写法2:COUNT+CASE组合(利用COUNT忽略NULL的特性)
SELECT account_id, COUNT(CASE WHEN order_origin = 'RESTAURANT' THEN 1 END) AS Order_From_Restaurant FROM ord_sample GROUP BY account_id ORDER BY Order_From_Restaurant DESC LIMIT 10
结果验证
使用上述正确查询后,会得到预期结果:账户59a4daa0619c067d79f9c0be27dfe61d91bad7058dea5cd5e964482409484f50的餐厅订单数为431。你之前得到的462是该账户的全部订单数量(包含非餐厅订单),这就是结果不符的根本原因。
内容的提问来源于stack exchange,提问作者KollerBy
相关产品推荐
相关产品推荐

