AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 153839
Accepted
user45867
user45867
Asked: 2016-11-01 13:40:29 +0800 CST2016-11-01 13:40:29 +0800 CST 2016-11-01 13:40:29 +0800 CST

在每个“组”中找到“第二大”字符串

  • 772

我正在做一些数据分析,想找到一种简单的方法来按功能检查组中每个“组”的所有成员。

比如,一个订单可能涉及 3 个代理。我想快速检查一下出于各种原因按此顺序“分组”的三个特工。

通常,我会为此使用 group_concat(查看所有分组字符串的简单方法)。然而,目前在 SQL 服务器中使用“group by”复制它似乎很困难且笨拙。

现在,粗糙和肮脏,我会 max(username) 和 min(username) 快速找到 2(90% 的订单可能有 2 或更少的人。有没有办法做 mid(username) 或 2nd- highest(username), or percentile(50th, username)? 这将是找到这些相关数据的一种很好、快速的方法。出于某种原因,我之前看到的描述 SQL Server 上的 group_concat 的答案对我来说听起来并不简单。

示例数据例如:

employee  purchase_id
bill        1
bob         1
chrissy     1
mike        2
bill        2
bob         3

目前我有这个:

purchase_id, employee_count, complicated metric
1                 3              blahblah
2                 2                dsflsajf
3                 1                98%

我想看一眼:

purchase_id, employees, complicated metric
1            (bill,bob,chrissy)   blahblah

然而,group_concat 似乎很难与 group by 语句一起使用 - 或者用 SQL Server 模拟 group_concat。所以相反,这个怎么样。

选择最大(员工),最小(员工)

purchase_id,  max(employee), min(employee)
1              bill            chrissy

在示例中,您看到 bob 被省略,因为 max/min 只会找到两个端点。如果有某种函数可以提取字符串的第二高值或第 50 个百分位值,那将会很有帮助。

sql-server
  • 2 2 个回答
  • 82 Views

2 个回答

  • Voted
  1. Best Answer
    mendosi
    2016-11-01T15:56:51+08:002016-11-01T15:56:51+08:00

    这样的事情会将结果分成多列,但您需要提前知道每个 purchase_id 的最大员工人数:

    With Ordered_cte As ( 
        Select employee,
            purchase_id,
            RowNo = Row_Number() Over (Partition By purchase_id Order By employee)
          From tbl_purchase_employee)
    Select purchase_id,
        Employee1 = Max(iif(RowNo = 1, employee, Null)),
        Employee2 = Max(iif(RowNo = 2, employee, Null)),
        Employee3 = Max(iif(RowNo = 3, employee, Null))
      From Ordered_cte
      Group By purchase_id;
    
    • 2
  2. a_vlad
    2016-11-01T14:52:09+08:002016-11-01T14:52:09+08:00
    SELECT
        t1.purchase_id,
        employees= STUFF((SELECT ','+ employee FROM tbl_employees t2 WHERE t2.purchase_id = t1.purchase_id FOR XML PATH('')) , 1 , 1 , '')
    
    FROM tbl_employees t1
    GROUP BY t1.purchase_id
    
    • 1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve