sql—如何跨多行获取满足条件的列

yebdmbv4  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(373)

如果我们有这样的数据,我在将所有事务数据分组为月份和每月项目计数后得到:

cust_id    item_month item_count
    64        1          1
    64        2          1
    64        3          1
    65        1          1
    66        2          1
    66        3          2

原来的表是

cust_id  item_name transaction_date
  64       bag      2017-01-01
  64       bag      2017-02-05
  64       bag      2017-03-07
  65       bottle   2017-01-10
  66       gloves   2017-02-11
  66       bag      2017-03-05
  66       kite     2017-03-02

我只想得到在3个月内(1、2和3)每个月的客户id,我们的item\u count>=1。我们怎么知道?基本上在上述情况下,答案是64。

SELECT 
  t1.cust_id
(SELECT 
   cust_id
FROM 
   table
WHERE item_count>=1 AND item_month=1) t1
JOIN 
(SELECT
   cust_id
FROM 
   table
WHERE item_count>=1 AND item_month=2) t2
ON t1.cust_id=t2_cust_id
JOIN
(SELECT
    cust_id
 FROM 
   table
 WHERE item_count>=1 AND item_month=3) t3
ON t1.cust_id=t3.cust_id

有没有更有效的方法?也许直接从交易数据?

hgb9j2n6

hgb9j2n61#

我不明白你从哪里得到64。。但以下是您如何在3个月内找到有价值的客户。

SELECT cust_id
FROM table
where item_month in (1,2,3)
GROUP BY cust_id
HAVING count( distinct item_month ) = 3
ep6jt1vc

ep6jt1vc2#

尝试此查询:

SELECT cust_id
FROM table
WHERE item_count >= 1
GROUP BY cust_id
HAVING COUNT(DISTINCT item_month) = 3

相关问题