我需要找到表中最常见的文本值,但我很难将我找到的解决方案应用到我的数据集。
我的表格结构如下:
A 栏 | B 栏 |
---|---|
瓦尔A | 瓦尔a |
瓦尔A | 瓦尔b |
瓦尔A | 瓦尔a |
瓦尔B | 瓦尔a |
瓦尔B | 瓦尔b |
瓦尔B | 瓦尔b |
我已经创建了使用 count 和 max 函数与 CTE 的计算模式的基本概念,但我真的不知道如何返回我需要的表。
我期待的是这样的表格:
A 栏 | B 栏 |
---|---|
瓦尔A | 瓦尔a |
瓦尔B | 瓦尔b |
Val a 是 Val A 中最常见的,b 是 B 中最常见的。
A 列中有数百个唯一值,我正在尝试解决这个问题,以便如果最频繁的值为 null,则可以返回 B 列中第二个最频繁的值。
感谢您的指导!
WITH counts AS(
SELECT
ColA,
COUNT(ColB) AS ColB_count
FROM table
GROUP BY ColA
)
SELECT ColA, ColB_count
FROM counts
WHERE ColB_count = (
SELECT MAX(ColB_count)
FROM counts
);
我想说这就是你试图用你尝试的sql做的事情:
with cte1 as (
select ColA, ColB, count(ColB) as CountOfColB
from #T
group by ColA, ColB
),
cte2 as (
select
ColA, Max(CountOfColB) as total
from cte1
group by ColA
)
select cte1.ColA, cte1.ColB --,cte1.CountOfColB
from cte1
inner join cte2
on cte1.ColA = cte2.ColA
and cte1.CountOfColB = cte2.total
order by cte1.ColA, cte1.ColB