首页 > 解决方案 > 使用两个表获取项目的降序列表

问题描述

CREATE TABLE [dbo].[HistoricoSeries] (
    [IDHistoricoSeries] INT IDENTITY (1, 1) NOT NULL,
    [IDUtilizador]      INT NOT NULL,
    [codepisodio]       INT NOT NULL,
    CONSTRAINT [PK_historicoseries] PRIMARY KEY CLUSTERED ([IDHistoricoSeries] ASC),
    CONSTRAINT [FK_96] FOREIGN KEY ([IDUtilizador]) REFERENCES [dbo].[Utilizadores] ([IDUtilizador]),
    CONSTRAINT [FK_hse] FOREIGN KEY ([codepisodio]) REFERENCES [dbo].[EPISODIOS] ([codepisodio])
);

CREATE TABLE [dbo].[EPISODIOS] (
    [idepisodio]     INT          IDENTITY (1, 1) NOT NULL,
    [codepisodio]    INT          NOT NULL,
    [codserie]       INT          NOT NULL,
    [codtemporada]   INT          NOT NULL,
    [numeroepisodio] INT          NOT NULL,
    [tituloepisodio] VARCHAR (53) NOT NULL,
    [duracaominutos] INT          NOT NULL,
    PRIMARY KEY CLUSTERED ([codepisodio] ASC)
);

这些是我的表定义。

string maisVistoEpisodio = "SELECT * FROM EPISODIOS WHERE EPISODIOS.codepisodio IN (SELECT codepisodio, count(codepisodio) AS mais_vistos FROM HISTORICOSERIES GROUP BY codepisodio ORDER BY COUNT (codepisodio) DESC)";

这是我的 SQL Server 查询,我已经有一段时间没有结果了。

我的最终目标是列出 EISODIOS 表中观看次数最多的剧集,但错误

当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。

自己出现了,我不知道如何解决。

任何人都可以阐明一点吗?谢谢。

标签: sqlsql-servergreatest-n-per-group

解决方案


您的代码看起来像 SQL Server。如果是这样,您可以TOP WITH TIES在子查询中使用:

SELECT E.*
FROM EPISODIOS E
WHERE E.codepisodio IN (SELECT TOP (1) WITH TIES HS.codepisodio
                        FROM HISTORICOSERIES HS
                        GROUP BY HS.codepisodio
                        ORDER BY COUNT(*) DESC
                       )

推荐阅读