sql - 如何在 SQL Server 中使用 Joins 编写这个具有排名功能的特定 Co-related 子查询?
问题描述
假设您有下表,其中包含城市、酒店、价格。您需要编写代码才能找到每个城市中最便宜的酒店,并且与同一城市中价格最高的酒店相比要便宜 %。仅使用联接。仅加入!
这是示例:请仅在 TEST_DB 中运行。
create table citycheap
(
city varchar(100),
Hotel varchar(100),
prici money
)
insert into citycheap
values ('Poway', 'Ramada Inn', 100), ('Poway', 'Elks Oaks', 70),
('Poway', 'Days Inn', 85),
('Long Beach', 'Days Inn', 95), ('Long Beach', 'Motel 8', 65),
('Long Beach', 'Hampton Inn', 105),
('San Diego', 'Motel 6', 55), ('San Diego', 'Beach Inn', 115),
('San Diego', 'Days Inn', 85)
select *
from citycheap
解决方案
您根本不需要连接:
WITH DataSource AS
(
select city
,Hotel
,prici
,ROW_NUMBER() OVER (PARTITION BY city ORDER BY prici ASC) AS rowID
,MAX(prici) OVER (PARTITION BY city) AS total_price
from citycheap
)
SELECT city
,hotel
,prici as LowPrice
,CAST((total_price - prici) * 100.0 / total_price AS DECIMAL(9,2)) as [% Cheapter]
FROM DataSource
WHERE rowID = 1;
WITH DataSource AS
(
SELECT city
,MIN(prici) as min_price
,MAX(prici) as max_price
,CAST((MAX(prici) - MIN(prici)) * 100.0 / MAX(prici) AS DECIMAL(9,2)) as [% Cheapter]
FROM citycheap
GROUP BY city
)
SELECT CH.city
,CH.Hotel
,CH.prici as LowPrice
,DS.[% Cheapter]
FROM citycheap CH
INNER JOIN DataSource DS
ON CH.prici = DS.[min_price]
推荐阅读
- python - 对于 A 列中的每个值,B 列中应该只有一个值 - Pandas
- list - 如何将列表传递给另一个班级?
- flutter - Flutter ,向下滚动时将 ListView 的容器保持在屏幕顶部
- amazon-web-services - 如何在 Amazon Route 53 中为 AWS 中的自定义端点弹性搜索创建 CNAME 映射?
- reactjs - 除非我清除所有浏览数据,否则 React 和 Django 应用程序不会更新更改
- spring-boot - 带有阻塞队列的 Spring Boot @kafkaListner
- html - 当我使用反应路线并且我的内容没有正确显示时,我无法找出我做错了什么
- kubernetes - Redis bitnami Helm Chart FAILED statefulset.yaml nil 指针评估接口 {}.BasePath
- terraform - 如何在 terraform 中使用 splat 运算符创建字符串输出
- android - 将设备日期/时间更改为未来后,在 Android 9 上获取 SSLHandshakeException(链验证失败)