Tom*_*mek 36 sql oracle group-by sum max
当我运行以下SQL语句时:
SELECT MAX(SUM(TIME))
FROM downloads
GROUP BY SSN
Run Code Online (Sandbox Code Playgroud)
它返回客户下载的最大总和值,但是如果我尝试通过将其添加到select语句来查找该最大值所属的社会保险号:
SELECT SSN, MAX(SUM(TIME))
FROM downloads
GROUP BY SSN
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
不是单组的功能
我不明白为什么会抛出这个错误.Google搜索提出了以下操作:
从SELECT列表中删除组函数或单个列表达式,或添加包含列出的所有单个列表达式的GROUP BY子句
从我认为这是说 - 删除组函数使得总和值无效 - 删除单个列表达式(SSN)将只给我最大总和 - 不确定第三部分.
任何人都可以指导正确的方向吗?
-Tomek
编辑:此数据库中的TIME是指下载的次数
fyj*_*ham 35
简单问题就是,查询中特定SSN的SUM(TIME)是单个值,所以它反对MAX,因为它没有意义(单个值的最大值没有意义).
不确定你正在使用什么SQL数据库服务器,但我怀疑你想要一个更像这样的查询(用MSSQL编写背景 - 可能需要一些翻译到你正在使用的sql服务器):
SELECT TOP 1 SSN, SUM(TIME)
FROM downloads
GROUP BY SSN
ORDER BY 2 DESC
Run Code Online (Sandbox Code Playgroud)
这将为您提供最长总时间和总时间的SSN.
编辑 - 如果您有多个具有相同时间并且想要它们的所有您将使用:
SELECT
SSN, SUM(TIME)
FROM downloads
GROUP BY SSN
HAVING SUM(TIME)=(SELECT MAX(SUM(TIME)) FROM downloads GROUP BY SSN))
Run Code Online (Sandbox Code Playgroud)
Ego*_*gov 10
如果您想要每个客户的下载编号,请使用:
select ssn
, sum(time)
from downloads
group by ssn
Run Code Online (Sandbox Code Playgroud)
如果您只想要一条记录 - 对于下载次数最多的客户 - 使用:
select *
from (
select ssn
, sum(time)
from downloads
group by ssn
order by sum(time) desc
)
where rownum = 1
Run Code Online (Sandbox Code Playgroud)
但是,如果您希望查看具有相同下载次数且占有最高位置的所有客户,请使用:
select *
from (
select ssn
, sum(time)
, dense_rank() over (order by sum(time) desc) r
from downloads
group by ssn
)
where r = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
226773 次 |
| 最近记录: |