sql - 如何简化包含计算的 mssql 查询
问题描述
我有 3 个表,其中包含我试图获取计数然后进行计算的数据。我有一个有效的查询,但它是重复的。
SELECT person_id,
(SELECT COUNT(*) from place_to_go where people.person_id=person_id) as 'Num_To_Go',
(SELECT COUNT(*) from place_been where people.person_id=person_id) as 'Num_Visited',
((SELECT COUNT(*) FROM place_been WHERE people.person_id=person_id) / (SELECT COUNT(*) FROM place_to_go WHERE people.person_id=person_id)) * 100 AS 'Perc_Visited'
FROM people;
我正在尝试完成的是没有重复的子查询来计算百分比。为此我在语法错误中所做的任何更改都变得非常令人沮丧。
以为我可能已经能够使用
SELECT person_id,
(SELECT COUNT(*) from place_to_go where people.person_id=person_id) as 'Num_To_Go',
(SELECT COUNT(*) from place_been where people.person_id=person_id) as 'Num_Visited',
(CONVERT(DECIMAL(3,0), 'Num_To_Go'))/(CONVERT(DECIMAL(3,0), 'Num_Visited')) * 100 AS 'Perc_Visited'
FROM people;
但这会导致将数据类型 varchar 转换为 numeric
任何指针将不胜感激。
解决方案
我会使用APPLY
:
SELECT person_id, Num_To_Go, Num_Visited, (Num_To_Go * 1.0 / Num_Visited) * 100 AS Perc_Visited
FROM people p OUTER APPLY
( SELECT COUNT(*) AS Num_To_Go
FROM place_to_go pg
WHERE P.person_id = pg.person_id
) pg OUTER APPLY
( SELECT COUNT(*) AS Num_Visited
FROM place_been pb
WHERE p.person_id = pb.person_id
) pb;
推荐阅读
- git - 如何使用此 Git 工作流程合并我的功能分支?
- php - PHP:如何使用 GD 库更改 8 位 PNG(png 具有透明度)的颜色
- python - 使用 Psycopg2 插入表格:冲突时什么也不做
- amazon-web-services - 如何使用 Terraform 提取 AWS API 网关中特定 API 可用的所有阶段?
- python - 如何在python中将3个或更多列表的元素两两结合?
- c - C中的ascii文件处理
- discord-jda - Discord JDA(服务器端)有没有办法禁用用户加入\用户离开音频?
- php - PHP函数中的命名空间与全局?
- firebase - Firestore 复合查询 - 结合 not-in 和不等式?
- python - 熊猫用时间序列索引重塑数据框