select 基于最少组计数的列的唯一行

select unique rows based on column by least group count

我需要构建一个 SQL 查询以 select 下方 table 的唯一记录(按最少的类别计数)。

例如:simon 属于红色和绿色类别,但红色只有一个记录,因为我应该优先考虑红色。

Name Category
Simon Green
Simon red
James Green
Mathew Green

输出应该是

Name Category
Simon red
James Green
Mathew Green

需要什么 SQL?

使用解析函数使这个问题得到解决table:

WITH cte1 AS (
    SELECT *, COUNT(*) OVER (PARTITION BY Category) cat_cnt
    FROM yourTable
),
cte2 AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY cat_cnt) rn
    FROM cte1
)

SELECT Name, Category
FROM cte2
WHERE rn = 1;

Demo

第一个 CTE 查找整个 table 中每种颜色(不管名称)的颜色计数。第二个 CTE 限制为每个名称的第一条记录具有较低的颜色计数。

关于您使用 Knex,我们可以尝试在不使用解析函数的情况下重写上面的内容,但这会非常难看。我实际上可能只建议在这里进行原始查询。

请看看是否有帮助。请相应地更改表名。

声明@Category Table(名称 varchar(100),类别 varchar(50)) 插入@Category select 'Simon','Green' 联合所有
select 'Simon','Red' 联合所有
select 'James','Green' 联合所有
--select 'James','red' 联合所有
select 'Mathew','Green'

;CTE 为
(
select [name],category, rank() over(partition by [name] order by best) 排名来自
( select [name],category,count(1) 以上(按类别划分)最好来自@Category ) 温度
)
select * 来自 CTE,排名=1