为同一个表编写子查询以访问不同的记录
Posted
技术标签:
【中文标题】为同一个表编写子查询以访问不同的记录【英文标题】:Writing subquery for same table to access distinct records 【发布时间】:2019-08-18 18:06:03 【问题描述】:我正在尝试查找完全不在retailer_id 27,28,29 中的记录数。但是此查询在配置单元中不起作用。你能建议我哪里出错了。
在同一张表上尝试过子查询,但这似乎不起作用。
Select count(Distinct T.hhid)
from transactions
where hhid NOT IN (Select hhid
from transactions
where retailer_id IN (4,5,6,7,8,13,17,20,21,25,31)
and transaction_date between '2018-08-01' and '2019-07-31'
) as T
where T.retailer_id IN (27, 28, 29)
and transaction_date between '2018-08-01' and '2019-07-31'
ERROR : missing EOF at 'as' near ')'
如果你能在 spark-sql 中提出一些对我也有用的建议。
【问题讨论】:
“完全不在”是什么意思?样本数据和期望的结果会有所帮助。 @GordonLinoff 我只想要那些使用retailer_id 27,28,29 交易的记录。在 (27,28,29) 和 (4,5,6,7,8,13,17,20,21,25,31) 中存在具有与 retailer_id 的交易的 hhid。我不想要那些隐藏。 【参考方案1】:试试下面这个脚本-
SELECT COUNT(Distinct T.hhid)
FROM transactions T
WHERE hhid NOT IN (
Select hhid
from transactions
where retailer_id IN (4,5,6,7,8,13,17,20,21,25,31)
and transaction_date between '2018-08-01' and '2019-07-31'
)
AND T.retailer_id IN (27, 28, 29)
AND transaction_date between '2018-08-01' and '2019-07-31'
【讨论】:
您的查询中定义的别名T
在哪里?另外,子查询的目的是什么?
hhid NOT IN (...) 和 T.retailer_id IN (...) 事情可能不一样。 Op 必须有他或她自己的逻辑来检查这一点。我刚刚更正了查询中的语法问题。【参考方案2】:
您的查询在很多方面都没有意义:
最后的as T
放错地方了。您具体想让别名 T
代表什么?
您的两个retailer_id
列表似乎是多余的。在一种情况下,您选择retailer_id
IS NOT IN (4,5,6,7,8,13,17,20,21,25,31)
的记录,然后添加一个WHERE
子句,声明retailer_id IS IN
(27, 28, 29)`。为什么两者都有?
我认为您可能想重新开始并确定您的选择标准是什么,然后从那里开始。
【讨论】:
我只想要那些使用retailer_id 27,28,29 交易的记录。在 (27,28,29) 和 (4,5,6,7,8,13,17,20,21,25,31) 中存在具有与 retailer_id 的交易的 hhid。我不想要那些隐藏。以上是关于为同一个表编写子查询以访问不同的记录的主要内容,如果未能解决你的问题,请参考以下文章