我正在使用SQL Server 2016,我遇到了多个col分组问题,并在省略重复行时找到了平均值。我有一个事务表定义为:
CREATE TABLE [dbo].[CUST_TRANSACTION]
(
[EXTRACT_DATE] [date] NULL,
[CUSTOMER_ID] [bigint] NULL,
[TRANS_NUMBER] [bigint] NULL,
[CATEGORY] [smallint] NULL,
[RANKING] [smallint] NULL
)
一些示例数据:
EXTRACT_DATE CUSTOMER_ID TRANS_NUMBER CATEGORY RANKING
---------------------------------------------------------------
2017-10-31 10001 1000101 4 100
2017-10-31 10001 1000102 4 100
2017-10-31 10001 1000105 4 0
2017-10-31 10001 1000106 4 0
2017-10-31 10002 1000201 4 200
2017-10-31 10001 1000103 5 100
2017-10-31 10001 1000107 5 0
2017-10-31 10003 1000301 5 300
2017-10-31 10003 1000302 5 300
2017-10-31 10004 1000401 7 500
2017-11-30 10004 1000403 7 300
2017-10-31 10001 1000104 8 100
2017-10-31 10004 1000402 8 0
2017-10-31 10003 1000303 8 300
请求是查找给定EXTRACT_DATE内的所有customer_id,并使用RANKING> 1存在于多个CATEGORY中。然后找到CUSTOMER_ID和CUSTOMER_ID EXISTS中的最高CATEGORY,最后找到CUSTOMER_ID EXISTS IN中的CATEGORIES数
输出应仅包含以下两行:
10001 8 3
10003 8 2
这是我到目前为止的SQL:
SELECT
MAX(CATEGORY), CUSTOMER_ID,
COUNT(CUSTOMER_ID) "Customer_id count"
FROM
CUST_TRANSACTION
WHERE
EXTRACT_DATE = CONVERT(datetime, '2017-10-31')
AND ranking > 1
GROUP BY
CUSTOMER_ID, CATEGORY
HAVING
COUNT(CUSTOMER_ID) > 1
输出:
CATEGORY CUSTOMER_ID Customer_id count
----------------------------------------
4 10001 2
5 10003 2
我正在获得正确的CUSTOMER_ID,但不是最大类别或CUSTOMER_ID所在的数字类别的正确计数。任何建议都会很棒。
由于
答案 0 :(得分:0)
尝试使用脚本
select MAX(CATEGORY), CUSTOMER_ID, count(CUSTOMER_ID) "Customer_id count"
from
(select distinct CUSTOMER_ID, CATEGORY
from CUST_TRANSACTION
where EXTRACT_DATE = Convert(datetime, '2017-10-31' )
and ranking > 1
)
group by CUSTOMER_ID
having count(CUSTOMER_ID) > 1