最常见的属性是主题没有返回正确数量的不同主题

时间:2014-06-04 16:03:58

标签: sql sql-server

我试图编写一个SQL SELECT来为我的sql server中的每个不同的EPISODIO返回最频繁的TIPO_ASSEPSIA。

从我所看到的SELECT技术上起作用(例如:在EPISODIO中有3行,如果两个TIPO_ASSEPSIA相同,它会选择该属性最频繁)但是当我去检查我得到的行数,得到3822行。这可能是正确的,因为如果我计算不同的EPISODIO的数量我得到3897,所以有几十行失踪,我不知道为什么。有什么想法吗?

我使用的代码是以下代码

SELECT DISTINCT
F1.EPISODIO,
F1.TIPO_ASSEPSIA
FROM DWS_DM F1
WHERE
 F1.TIPO_ASSEPSIA  =
    (     SELECT t.TIPO_ASSEPSIA from
            (
            SELECT TOP 1 TIPO_ASSEPSIA , (COUNT(*)) AS freq
            FROM  DWS_DM F2
            WHERE F2. EPISODIO = F1.EPISODIO
            GROUP BY F2.TIPO_ASSEPSIA 
            ORDER BY count(TIPO_ASSEPSIA) DESC)t     
    )

2 个答案:

答案 0 :(得分:1)

SELECT DISTINCT
F1.EPISODIO,
x.TIPO_ASSEPSIA
FROM DWS_DM F1
OUTER APPLY
    (       SELECT TOP 1 r.TIPO_ASSEPSIA , (COUNT(*)) AS freq
            FROM  DWS_DM r
            WHERE r.EPISODIO = F1.EPISODIO
            GROUP BY TIPO_ASSEPSIA 
            ORDER BY count(TIPO_ASSEPSIA) DESC
    ) x

答案 1 :(得分:0)

为什么要回复您的F1别名?我想你想这样做:

SELECT DISTINCT
F1.EPISODIO,
F1.TIPO_ASSEPSIA
FROM DWS_DM F1
WHERE
 F1.TIPO_ASSEPSIA  =
    (     SELECT t.TIPO_ASSEPSIA from
            (
            SELECT TOP 1 TIPO_ASSEPSIA , (COUNT(*)) AS freq
            FROM  DWS_DM
            GROUP BY TIPO_ASSEPSIA 
            ORDER BY count(TIPO_ASSEPSIA) DESC)t     
    )