sql-server - 为什么 COUNT() 与 MS SQL Server 中的 SELECT TOP 一起使用或不使用?
问题描述
我刚刚开始学习 MS SQL Server,遇到了一个问题,即从 HackerRank 上的数据库中找到 LAT_N 的中值。 这就是问题所在。 如果不登录就无法查看上述链接,这是数据库架构。
这是我的代码。
SELECT
CASE
WHEN COUNT(LAT_N)%2=0 THEN TOP COUNT(LAT_N)/2 LAT_N
ELSE TOP COUNT(LAT_N)/2+1 LAT_N
END as col1
INTO T1
FROM STATION
ORDER BY LAT_N ASC;
SELECT TOP COUNT(LAT_N)/2 LAT_N AS col2
INTO T2
FROM STATION
ORDER BY LAT_N DESC;
SELECT TOP 1 col1
FROM T1
ORDER BY LAT_N DESC;
SELECT TOP 1 col2
FROM T2
ORDER BY LAT_N ASC;
我得到了这里的错误:
Msg 156, Level 15, State 1, Server dbrank-tsql, Line 4
Incorrect syntax near the keyword 'TOP'.
所以我决定在 W3schools 上的一个小型数据库上尝试一下。 这里是编辑器。
此查询有效:
SELECT TOP 3 *
FROM Customers;
但这不会:
SELECT TOP COUNT(*)/2 *
FROM Customers;
有人可以解释一下:
- 为什么它不起作用和
- 如何使 TOP COUNT(*)/2 工作。
解决方案
你的 SQL 没有意义。TOP
后面需要一个标量值,如果是表达式,则需要放在括号 ( ()
) 中。SELECT TOP COUNT(*)/2 *
没有意义,你想要TOP
什么?然后你有COUNT(*)/2 *
什么然后乘以那个值?您缺少表达式的一部分。
对于SELECT TOP COUNT(LAT_N)/2 LAT_N AS col2
. TOP
什么?_ 您缺少您的值TOP
,然后直接要求除以 2COUNT
的非NULL
值中的一个。然后看起来您缺少一个逗号,但考虑到您要返回它的a需要在您的所以它不清楚你的目标是什么。LAT_N
COUNT
LAT_N
GROUP BY
如果您在表格的上“一半”之后,(来自您的评论“如何使 TOP COUNT( )/2 工作。”*)使用TOP(50 PERCENT)
:
SELECT TOP (50 PERCENT)
*
FROM dbo.CUSTOMERS
ORDER BY ???;
推荐阅读
- c# - 元组列表到该元组列表中的第一个元素列表 C#
- javascript - 键盘导致模态消失 React-Native
- wordpress - 为什么我只在 Edge 浏览器中通过 fetch 收到 400 个错误请求?
- java - 对于获得异常 Null_Pointer_Exception 的 Flipkart 项目
- r - dplyr 将“尾”行折叠成更大的组
- node.js - 猫鼬 - 人口密集的精益
- python - Python海龟颜色没有正确填充
- typescript - Ionic 将 Video URI 转换为 File 对象以上传到 Firebase
- ansible - Ansible-Playbook:ntpstat
- sql - BigQuery 标准 SQL 从时间戳返回不同的 WEEK