带有 WHERE 条件的 COUNT 不会返回所有行

问题描述 投票:0回答:1

我正在为 DataLemur SQL 问题编写一个解决方案,我几乎猜对了,但缺少一行。

我自己写了这个查询:

WITH CTE AS
(
SELECT 
  user_id,
  transaction_date,
  DENSE_RANK() OVER (PARTITION BY user_id order by transaction_date) as ranked_transact
FROM user_transactions
)
SELECT 
  transaction_date,
  user_id,
  COUNT(user_id) as purchase_count
FROM CTE
WHERE ranked_transact IN (SELECT MAX(ranked_transact) FROM CTE)
GROUP BY user_id, transaction_date

然后,当我提交时,我发现我缺少一行:由于某种原因,WHERE 子句条件不适用于 user_id = 115。

期望的结果应该是:

交易日期 用户ID 购买次数
2022年7月11日10:00:00 123 1
2022年7月12日10:00:00 115 1
2022年7月12日10:00:00 159 2

但是我的查询返回了:

交易日期 用户ID 购买次数
2022年7月11日10:00:00 123 1
2022年7月12日10:00:00 159 2

我检查了解决方案,发现他们按照 transaction_date 的降序排列排名,然后他们使用 WHERE transaction_date=1 。在我的查询中,我按升序对排名进行排序,并要求 select 语句返回最大排名值,该值应该为我提供最新的交易行,不是吗?

我可能错过了一些愚蠢的东西,但有人可以向我解释问题出在哪里以及为什么当我使用 count 函数时 user_id 115 不包括在内?

谢谢!

sql database postgresql
1个回答
0
投票

MAX(ranked_transact)
取决于
user_id
,因此您应该将其添加到 WHERE 子句中。


CREATE TABLE user_transactions ( 
   product_id INTEGER ,
   user_id INTEGER ,
   spend DECIMAL(8,2) ,
   transaction_date TIMESTAMP );

INSERT INTO  user_transactions  VALUES
('3673','123','68.90','07/08/2022 10:00:00'),
('9623','123','274.10','07/08/2022 10:00:00'),
('1467','115','19.90','07/08/2022 10:00:00'),
('2513','159','25.00','07/08/2022 10:00:00'),
('1452','159','74.50','07/10/2022 10:00:00'),
('1452','123','74.50','07/10/2022 10:00:00'),
('9765','123','100.15','07/11/2022 10:00:00'),
('6536','115','57.00','07/12/2022 10:00:00'),
('7384','159','15.50','07/12/2022 10:00:00'),
('1247','159','23.40','07/12/2022 10:00:00');


WITH CTE AS
(
SELECT 
  user_id,
  transaction_date,
  DENSE_RANK() OVER (PARTITION BY user_id order by transaction_date) as ranked_transact
FROM user_transactions
)
-- select * from CTE;
SELECT 
  transaction_date,
  user_id,
  COUNT(user_id) as purchase_count
FROM CTE
WHERE (user_id,ranked_transact) IN (SELECT user_id,MAX(ranked_transact) FROM CTE group by user_id)
GROUP BY user_id, transaction_date
;
© www.soinside.com 2019 - 2024. All rights reserved.