大家好,我有一个问题就是吃了好几个小时.我要做的是计算表t2中有多少行具有相同的值,并且仅显示最大值而不是所有行.但我得到错误.我怎么能解决这个问题?我找不到具体的答案.
消息130,级别15,状态1,行5无法对包含聚合或子查询的表达式执行聚合函数.
.
SELECT t1.operatoriausPavadinimas,count(t2.operatoriausID) as ct
FROM Operatorius t1,Planas t2
WHERE t1.operatoriausID=t2.operatoriausID
Group by t1.operatoriausPavadinimas
Having COUNT(t2.operatoriausID)>=MAX(COUNT(t2.operatoriausID))
Run Code Online (Sandbox Code Playgroud)
那是正确的; 嵌套聚合函数没有意义(尽管在窗口函数中嵌套聚合函数确实有意义).一种简单的方法使用窗口函数,这在大多数数据库中都可用:
SELECT op.*
FROM (SELECT o.operatoriausPavadinimas, count(p.operatoriausID) as ct,
RANK() OVER (ORDER BY count(p.operatoriausID) DESC) as seqnum
FROM Operatorius o JOIN
Planas p
ON o.operatoriausID = p.operatoriausID
GROUP BY o.operatoriausPavadinimas
) op
WHERE seqnum = 1;
Run Code Online (Sandbox Code Playgroud)
笔记:
t1和t2(或a和b)等随机名称.JOIN语法.简单规则: 不要在FROM子句中使用逗号.编辑:
好的,在SQL Server中,最简单的是TOP WITH TIES:
SELECT TOP (1) WITH TIES o.operatoriausPavadinimas, count(p.operatoriausID) as ct
FROM Operatorius o JOIN
Planas p
ON o.operatoriausID = p.operatoriausID
GROUP BY o.operatoriausPavadinimas
ORDER BY COUNT(p.operatoriausID) DESC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
399 次 |
| 最近记录: |