Sql 多列上的查询计数()
为了练习,我创建了以下数据库 我希望能够计算()每个用户在表“舞蹈”中的舞蹈数 这就是问题所在Sql 多列上的查询计数(),sql,sql-server,join,count,Sql,Sql Server,Join,Count,为了练习,我创建了以下数据库 我希望能够计算()每个用户在表“舞蹈”中的舞蹈数 这就是问题所在 SELECT [user].[id_user], [user].[user_name], COUNT([dance].[dancer_2_id_user]) AS 'number of dances' FROM [user] LEFT JOIN [dance] ON [user].[id_user] = [dance].[dancer_2_id_user] GR
SELECT
[user].[id_user], [user].[user_name],
COUNT([dance].[dancer_2_id_user]) AS 'number of dances'
FROM
[user]
LEFT JOIN
[dance] ON [user].[id_user] = [dance].[dancer_2_id_user]
GROUP BY
[user].[id_user], [user].[user_name]
返回用户在“dancer_2_id_user”列中计数的次数
这个问题呢
SELECT
[user].[id_user], [user].[user_name],
COUNT([dance].[dancer_1_id_user]) AS 'number of dances'
FROM
[user]
LEFT JOIN
[dance] ON [user].[id_user] = [dance].[dancer_1_id_user]
GROUP BY
[user].[id_user], [user].[user_name]
返回用户在“dancer\u 1\u id\u user”列中计数的次数
我想把这两个查询放在一起,因为用户可以出现在“舞蹈”表的任意一列中,以便能够计算每个用户的舞蹈总数
使用
union all
select
user_id,
user_name,
sum(number_of_dances) as number_of_dances
from
(
SELECT
[user].[id_user] as user_id,
[user].[user_name] as user_name,
count([dance].[dancer_2_id_user]) as number_of_dances
FROM [user]
left JOIN [dance]
ON [user].[id_user] = [dance].[dancer_2_id_user]
GROUP BY [user].[id_user], [user].[user_name]
union all
SELECT
[user].[id_user],
[user].[user_name],
count([dance].[dancer_1_id_user])
FROM [user]
left JOIN [dance]
ON [user].[id_user] = [dance].[dancer_1_id_user]
GROUP BY [user].[id_user], [user].[user_name]
)val
group by
user_id,
user_name
您可以使用中的运算符
将用户
加入到舞蹈
,同时满足这两种条件:
SELECT u.[id_user], u.[user_name],
COUNT(d.id_dance) AS [number of dances]
FROM [user] u LEFT JOIN [dance] d
ON u.[id_user] IN (d.[dancer_1_id_user], d.[dancer_2_id_user])
GROUP BY u.[id_user], u.[user_name]
请参阅。
结果:
非常感谢。我只是在读课程中关于“联合”的章节:)from语句后面的“val”是什么?@Tanuki您必须为子查询提供别名,它可以是任何东西,所以我随机选择了val
。因此,我首先对两个查询进行了合并,然后对每个用户的舞蹈计数求和。我不知道我们可以这样做计数(合并(d.[dancer\u 1\u id\u user],d.[dancer\u 2\u id\u user])
。很好的解决方案,今天我学到了一些新东西。我已经编辑过了。你在dance中有一个主键,你可以用它来代替coalesce(),这会更好。@forpas我在加入后不知道in的用法,我只知道in和WHERE的用法。我正在寻找如何用这种方式使用它的解释,但我找不到其他例子或教程。你能给我指个地方解释一下吗?ON子句中IN的用法没有什么特别之处。中的运算符返回布尔值:TRUE或FALSE,可以在布尔值有效的任何位置使用。就像a.id=b.id
返回TRUE或FALSE一样。您可以在这里阅读更多内容:谢谢@forpas,实际上,链接中的示例也显示了in与where子句的用法,但我想我已经开始了解如何使用它了。我刚刚用这个魔术重新格式化了我的一个查询。
SELECT u.[id_user], u.[user_name],
COUNT(d.id_dance) AS [number of dances]
FROM [user] u LEFT JOIN [dance] d
ON u.[id_user] IN (d.[dancer_1_id_user], d.[dancer_2_id_user])
GROUP BY u.[id_user], u.[user_name]
> id_user | user_name | number of dances
> ------: | :-------- | ---------------:
> 1 | sara | 3
> 2 | elenor | 4
> 3 | eva | 2
> 4 | mike | 2
> 5 | phil | 3
> 6 | laurent | 1
> 7 | nidia | 1
> 8 | franz | 1
> 9 | stephan | 1
> 10 | sandra | 3
> 11 | virginie | 1
> 12 | claire | 3
> 13 | laurence | 1
> 14 | pierre | 2
> 15 | thierry | 0
> 16 | nancy | 0