首页 > 数据库 >SQL 多关键字查询并根据匹配程度排序

SQL 多关键字查询并根据匹配程度排序

时间:2024-03-12 15:37:51浏览次数:26  
标签:UserName Source UNION 关键字 Score SQL 排序 SELECT Subject

--创建测试表
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Score]') AND type in (N'U'))
DROP TABLE [dbo].[Score]
GO
CREATE TABLE [dbo].[Score](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [UserName] [nvarchar](50) NULL,
    [Subject] [nvarchar](50) NULL,
    [Source] [numeric](18, 0) NULL
) ON [PRIMARY]
GO

--插入测试数据
INSERT INTO [Score] ([UserName],[Subject],[Source])
    SELECT N'张三',N'语文',60  UNION ALL
    SELECT N'李四',N'数学',70  UNION ALL
    SELECT N'王五',N'英语',80  UNION ALL
    SELECT N'王五',N'数学',75  UNION ALL
    SELECT N'王五',N'语文',57  UNION ALL
    SELECT N'李四',N'语文',80  UNION ALL
    SELECT N'张三',N'英语',100
GO

--入参:
DECLARE @UserName VARCHAR(100)
DECLARE @Subject VARCHAR(100)
DECLARE @Source VARCHAR(100)
SET @UserName='张'
SET @Subject='语文'
SET @Source='70'


SELECT id, sum((CASE WHEN charIndex(@UserName,[UserName])>0 THEN 1 ELSE 0 END)
              +(CASE WHEN charIndex(@Subject, [Subject])>0 THEN 1 ELSE 0 END)
              +(CASE WHEN [Source]>@Source THEN 1 ELSE 0 END)
              ) AS cnt
INTO #temp
FROM Score GROUP BY id


SELECT * FROM  Score a JOIN #temp b ON a.id=b.id ORDER BY b.cnt DESC,UserName
DROP TABLE #temp

标签:UserName,Source,UNION,关键字,Score,SQL,排序,SELECT,Subject
From: https://www.cnblogs.com/viazure/p/18068396

相关文章

  • CentOS8安装postgresql13和postgis
    CentOS8安装postgresql13和postgis这里使用的是8.5.2111操作系统版本,首先解决一下网络源的问题。检验dnf是否能正常使用,顺便安装wgetdnf-yinstallwget 一、安装postgresql131、配置postgresql官网提供的网络源dnfinstall-yhttps://download.postgre......
  • MySQL(十):MySQL主从复制搭建
    主从复制有一主一从、一主多从、多主一从等多种模式,这里搭建一主一从模式,其他模式搭建过程的类似。1、准备工作准备两台虚拟机,这里准备了两台虚拟机,并在两个节点安装MySQL。192.168.33.55(主节点)192.168.33.11(从节点)mysqlversion:8.0.312、主从复制搭建2......
  • MySQL(九):MySQL主从复制原理
    1、什么是MySQL主从复制MySQL主从复制:数据从一个主节点数据库复制到至少一个从节点数据库。MySQL采用异步复制方式同步数据,从节点不需要一直访问主数据库更新自身数据。2、为什么需要MySQL主从复制2.1、保证系统的高可用在复杂业务系统中,某些频繁的操作会导致MySQL锁......
  • 拆解跨天时间(mysql游标循环)-在转来的基础上增加一些更改
    尊重作者,原文链接:https://blog.csdn.net/liminghui4321/article/details/102763052原始数据表:需要将上面的时间段转成每一天的记录: 在原文的基础上作了一些更改:1、在表sales上增加一个字段bj:altertablesalesaddcolumnbjintDEFAULT0null;2、存储过程基础上增加了......
  • MySQL(八):MySQL之索引
    1、MySQL索引及作用MySQL官网:索引(Index)是帮助MySQL高效获取数据的数据结构。索引是数据结构。一个索引就是一个B+树,加快数据查询的速度。一个select查询语句在执行过程中一般最多能使用一个辅助索引,即使在where条件中用了多个辅助索引。2、InnoDB存储引擎支持的常见索......
  • MYSQL语法:左连接、右连接、内连接、全外连接
    概念leftjoin(左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。rightjoin(右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。innerjoin(内连接):只返回两个表中连接字段相等的行。fulljoin(全外连接):返回左右表中所有的记录和左右表中连接字段相等的记录......
  • sql使用pivot进行行转列
    1当然可以,我会用一个简单的例子来解释如何使用SQL的PIVOT操作进行行转列。23假设我们有一个销售数据表SalesData,它记录了不同产品在不同年份的销售额。表结构如下:456+----+---------+-------+--------+7|ID|Product|Year|Sales|8+----+---------......
  • MySQL 精通与优化
    目录1.数据库管理与优化1.1.用户管理和权限控制1.2.数据库的备份和恢复1.3.数据库的性能优化和调优1.4.锁定和事务管理2.高可用性与容错性2.1.主从复制(Master-SlaveReplication)2.2.主主复制(Master-MasterReplication)2.3.数据库集群技术3.实践与项目案例3.1.......
  • typeorm mysql blob 存储base64
    typeormmysqlblob存储base64在TypeORM中,要将Base64数据存储到MySQL数据库的BLOB字段,您需要先将Base64字符串转换为Buffer,然后使用TypeORM的实体管理器来保存。以下是一个简单的例子:首先,定义您的实体:  import{Entity,PrimaryGeneratedColumn,Column}from......
  • mysql for update是锁表还是锁行
    转载至我的博客https://www.infrastack.cn,公众号:架构成长指南在并发一致性控制场景中,我们常常用forupdate悲观锁来进行一致性的保证,但是如果不了解它的机制,就进行使用,很容易出现事故,比如forupdate进行了锁表导致其他请求只能等待,从而拖垮系统,因此了解它的原理是非常必要的,......