在SQL中使用多列计数的查询

在SQL中使用多列计数的查询,sql,Sql,我对SQL很陌生 我有一个电影数据库。下表列出了以下内容及其列: 类别表 列-类别id、名称、上次更新 电影分类表 列-胶片id、类别id、上次更新 库存表 列-库存标识、电影标识、商店标识、上次更新 租赁表 列-出租id、出租日期、库存id、客户id、退货日期、员工id、上次更新 胶片台 列-电影id、标题 问题 我希望创建一个查询,列出每部电影、它所属的电影类别以及它的租赁频率。我希望尽可能多地使用五个表中的数据 我希望该表输出电影标题列、类别名称列以及出租次数。输出应如下所示: title

我对SQL很陌生

我有一个电影数据库。下表列出了以下内容及其列:

类别表

列-类别id、名称、上次更新

电影分类表

列-胶片id、类别id、上次更新

库存表

列-库存标识、电影标识、商店标识、上次更新

租赁表

列-出租id、出租日期、库存id、客户id、退货日期、员工id、上次更新

胶片台

列-电影id、标题

问题 我希望创建一个查询,列出每部电影、它所属的电影类别以及它的租赁频率。我希望尽可能多地使用五个表中的数据

我希望该表输出电影标题列、类别名称列以及出租次数。输出应如下所示:

title              name          rental_count
Alter Victory      Animation         10
Goofy Movie        Animation         20
对于这项任务的帮助,我们将不胜感激

 WITH film_rents AS 
(
SELECT  I.film_id, COUNT(1) AS rental_count
FROM Inventory AS I
INNER JOIN Rental AS R ON R.inventory_id = I.inventory_id
GROUP BY I.film_id)

SELECT F.title, ISNULL(rental_count, 0 ) AS rental_count, C.name     
FROM  Film AS F 
LEFT  JOIN  film_rents AS FR ON F.film_id = FR.film_id
INNER JOIN Film_Category AS FC ON FC.film_id = F.film_id
INNER JOIN Category AS C ON C.category_id = FC.category_id
这是你要求的,但我认为你真正想要的不仅仅是这个。我这样说是因为你有一个连接表电影类别,这意味着一部电影有一个或多个类别。在这种情况下,您请求的查询和上面的查询不适合您。如果您正在使用SQL‌ 服务器2017您可以使用以下选项:

WITH film_rents AS 
(
SELECT  I.film_id, COUNT(1) AS rental_count
FROM Inventory AS I
INNER JOIN Rental AS R ON R.inventory_id = I.inventory_id
GROUP BY I.film_id),

film_categories AS 
(
SELECT FC.film_id, STRING_AGG(C.name, ',') AS categories 
FROM Film_Category AS FC  
INNER JOIN Category AS C ON C.category_id = FC.category_id
GROUP BY FC.film_id
)

SELECT F.title, ISNULL(rental_count, 0 ) AS rental_count, FC.categories AS [name]    
FROM  Film AS F 
LEFT  JOIN  film_rents AS FR ON F.film_id = FR.film_id
INNER JOIN film_categories AS FC ON FC.film_id =  F.film_id

使用联接和聚合函数计数


添加适当的数据样本。。预期结果和您尝试执行的查询write@scaisEdge我添加了我希望输出的方式。没有合适的数据示例来解释表Rental和Inventory之间的关系。。我不知道你的问题怎么回答。。。因此,请添加一个清晰的数据示例,说明您错过了scaisEdge请求的许多部分。另外,关于如何改进您的问题,请查看以下链接:我也删除了冲突的产品标签。请加上你用过的那一个。没错!因此,每部电影都有一个或多个类别,我希望得到这些类别的计数@Afshin Amiri您使用哪种SQL Server版本?令人惊讶的是,唯一正确的答案没有得到支持:我尝试了这个。然而我得到一个语法错误:在=行处或附近的语法错误:F.film_id=Fc=film上的内部连接Flim F_id@DeepakMyap extra=现在是否已编辑您可以立即检查它,或者如果有小提琴链接,您可以提供给我,以便我可以按需要检查well@DeepakM任何理由,让我们说一件事@Zaynul阿巴丁图欣。您可以只进行编辑,使count列成为查询中的最后一列,而不是第一列!谢谢
select F.title,C.name,count(rental_id) as rental_count from Rental R
    left join Inventory I on R.inventory_id=I.inventory_id
    inner join Film_Category Fc  on I.film_id=Fc.film_id
    inner join Flim F on F.film_id=Fc.film_id
    inner join Category C on Fc.category_id=C.category_id
group by F.title,C.name