【问题标题】:Count each value appearance in one row and get 3rd corresponding value from another row计算一行中出现的每个值,并从另一行获取第三个对应值
【发布时间】:2018-06-19 22:20:57
【问题描述】:

我有如图所示的带有表的数据库。

N 包含重复值,必须计算每个值在数据库中出现的次数。

如果计数为>=10,则应从 P 列中找到适当的第三大值,例如对于100288414,它是10.3432543886119。然后将来自NWP 的相应值复制并粘贴到另一个表中。以此类推,直到数据库结束。

我如何在 mssql 中做到这一点?

【问题讨论】:

  • 你确定你附上了正确的图片..?
  • 你的描述和你的图片不匹配——这让你很难理解你的问题。最好将数据作为文本表格放入。
  • 我的错误,上传的 coorect 图片
  • 请阅读this,了解一些改进问题的技巧。

标签: sql sql-server filtering


【解决方案1】:

试试这个查询:

select ID, N, W, P from (
    select ID, N, W, P,
           row_number() over (partition by N order by P desc) rn,
           count(ID) over (partition by N) cnt
    from TBL
) a where cnt >= 10 and rn = 3

如果N 列中特定值的条目不少于10 个,则以上将相应地返回第三个最大值到P 列。

【讨论】:

  • 谢谢,但是这个返回错误 Msg 102, Level 15, State 1, Line 3 '(' 附近的语法不正确。
  • @Zazvata 我很高兴能帮上忙。如果答案解决了您的问题,您应该接受它并选择支持它。
【解决方案2】:

我想出了两个可以完成工作的查询,首先

select n, count(*) as N FROM mytable GROUP BY n;

返回第 n 列的值在表中出现的次数,第二次返回 1-2-3 最高值

WITH cte AS ( SELECT n, p, ROW_NUMBER() OVER (PARTITION BY n ORDER BY p ASC ) AS rn FROM mytable ) SELECT n, p, rn FROM cte WHERE rn <= 3 ORDER BY n, rn ;

但我不知道如何从 w 列添加数据并将这些查询合并为一个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2019-12-08
    • 2020-08-21
    • 2023-03-23
    • 2019-08-09
    • 1970-01-01
    • 2019-03-09
    相关资源
    最近更新 更多