首页 > 数据库 >SQL知识与练习

SQL知识与练习

时间:2024-11-14 16:09:29浏览次数:1  
标签:account 知识 -- 练习 SQL test table WHERE SELECT

目录

SQL知识与练习

日期

-- 查询当年 当月 当天 过去七天  某个日期后的 30 天
-- SELECT * FROM ods_bctulmarket WHERE businessdate BETWEEN '2024-01-01' AND '2024-12-31';
-- SELECT * FROM ods_bctulmarket WHERE businessdate >= DATE_TRUNC('year',CURRENT_DATE);
-- SELECT * FROM ods_bctulmarket WHERE businessdate >= DATE_TRUNC('month',CURRENT_DATE);
-- SELECT * FROM ods_bctulmarket WHERE businessdate >= NOW(); 
-- SELECT * FROM ods_bctulmarket WHERE businessdate >= NOW()- INTERVAL '7 days';  
-- SELECT * FROM ods_bctulmarket WHERE businessdate >= NOW() - INTERVAL '300 days';
--
-- SELECT * FROM ods_bctulmarket WHERE businessdate >= Date '2024-01-01' + INTERVAL '29 days';
-- 
-- SELECT * FROM ods_bctulmarket WHERE EXTRACT(YEAR FROM businessdate) = 2023;
-- SELECT * FROM ods_bctulmarket WHERE EXTRACT(MONTH FROM businessdate) = 2;

ROW_NUMBER、SUBSTR、SUBSTR和COALESCE方法

--解读  ROW_NUMBER() 为 document_id 生成序号时,通常需要一个排序依据
	ods_document_tmp as ( -- 生成凭证号
	 SELECT instruction_no, ROW_NUMBER ( ) OVER ( ) AS "document_id" FROM order_1 GROUP BY instruction_no
),
   ROW_NUMBER() OVER (ORDER BY instruction_no):在每个唯一的 instruction_no 组内为每行生成唯一的序号,且按 instruction_no 排序。 
   
--解读
    SUBSTR( REPLACE ( cast (bill_date as text), '-', '' ), 1, 6 ) || odt.document_id AS "document_id",
    cast (bill_date as text) 将时间转为文本
    REPLACE(..., '-', ''):去除 bill_date 中的所有 - 符号,例如将 2024-10-24 转换为 20241024
    SUBSTR(..., 1, 6):截取转换后的字符串前 6 个字符,如202410
    || odt.document_id:将截取的年月字符串与 odt.document_id 进行字符串拼接 如20241000007  
    odt就是ods_document_tmp
    
    --保留两位小数
    COALESCE(round( "origin_currency", 2 ),0) AS "origin_currency",
    COALESCE(..., 0):如果 origin_currency 是 NULL,则返回 0,否则返回经过 ROUND 处理的 origin_currency 值。
     
  ---sql不区分大小写,需要”“ 保证大小写

LIKE、INNER JOIN、LEFT OUTER JOIN

SELECT * FROM table_test WHERE quantity > 10000 and trade_date >'2024-11-1';

SELECT * FROM table_test WHERE trade_date  BETWEEN '2024-10-30' AND '2024-11-4';

SELECT * FROM "Pro_Product" WHERE "number" LIKE 'OCO%' -- 以OCO开头的数据

SELECT * FROM "Pro_Product"  WHERE "number" LIKE '%TAC7'  -- 以TAC7结尾的数据

SELECT * FROM "Pro_Product"  WHERE "number" LIKE '_C%17'  -- C在第二个位置并且以17结尾的数据
 
SELECT * FROM table_test WHERE quantity::TEXT LIKE '527%'  ---数量以527开头的数据

SELECT * FROM table_test WHERE account  NOT IN ('41183','53378')

SELECT * FROM table_test WHERE quantity IS NOT NULL

SELECT quantity FROM table_test WHERE quantity>300000
 
SELECT * FROM table_test LIMIT 5 OFFSET 2  -- 第三位开始提取 3 个记录

SELECT * FROM table_test ORDER BY quantity,account ASC  -- 升序排列  降序 DESC

SELECT  account, "sum"(quantity) AS total FROM table_test GROUP BY account
SELECT  account, SUM(quantity) AS total FROM table_test GROUP BY account  --   GROUP 必须和聚合函数一起使用 sum AVG COUNT
SELECT  account, SUM(quantity) AS total FROM table_test GROUP BY account ORDER BY account ASC 
SELECT  account FROM table_test GROUP BY account HAVING COUNT(account) >1; --account 字段值进行分组,并且名称的计数大于 1 数据

SELECT DISTINCT account FROM table_test


SELECT account FROM table_test 
WHERE account IN  (SELECT account,quantity FROM table_test WHERE quantity >300000);

--CROSS JOIN :交叉连接     -- 第一个表的每一行与第二个表的每一行进行匹配
--INNER JOIN:内连接     --连接谓词结合两个表的列值来创建一个新的结果表
--LEFT OUTER JOIN:左外连接  --执行内部连接。连接的表在 T1 中每一行至少有一行 ,不满足条件有null也会添加一个连接行
--RIGHT OUTER JOIN:右外连接  --执行内部连接。对于表T2中不满足表T1中连接条件的每一行,其中T1列中的值为空也会添加一个连接行
--FULL OUTER JOIN:全外连接   -- 执行内部连接。然后,对于表 T1 中不满足表 T2 中任何行连接条件的每一行,如果 T2 的列中有 null 值也会添加一个到结果中。此外,对于 T2 中不满足与 T1 中的任何行连接条件的每一行,将会添加 T1 列中包含 null 值的到结果中。

SELECT * FROM table_test 
INNER JOIN "Account_Maping" ON table_test.account = "Account_Maping"."ExternalAccountNumber";

SELECT  * FROM table_test 
LEFT OUTER JOIN  "Account_Maping" ON table_test.account = "Account_Maping"."ExternalAccountNumber"


SELECT * FROM  "Account_Maping" LIMIT 5;

 SELECT  COALESCE ( acct."AccountId", '待确认' ) AS tradingaccount,...FROM -- 将acct表中的AccountId 重新命名为tradingaccount,如果没有找到就会返回待确认

标签:account,知识,--,练习,SQL,test,table,WHERE,SELECT
From: https://www.cnblogs.com/zhanglanhua/p/18546239

相关文章

  • 期货期权知识
    [OTC]期权期货的知识#金融工程工具 基础性证券:股票和债券金融衍生证券:期货、期权、远期和互换#概念 期货则是在交易所集中交易的标准化的远期产品。 互换是两个或两个以上当事人按照商定条件,在约定时间内交换一系列现金流的合约。 期权则是指赋予购......
  • 力扣-Mysql-3252-英超积分榜排名 II(中等)
    一、题目来源3252.英超积分榜排名II-力扣(LeetCode)二、数据表结构表:TeamStats+------------------+---------+|ColumnName|Type|+------------------+---------+|team_id|int||team_name|varchar||matches_played......
  • Python练习2:企业发放的奖金根据利润提成。利润([)低于或等于10万元时,奖金可提10%;利润
     Python练习2:企业发放的奖金根据利润提成。利润([)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时......
  • 8条项目管理知识库,小白必看!
    对于项目管理的新手来说,理解项目管理的基本概念和流程是成功的第一步。以下是8条项目管理知识库,帮助小白从基础开始逐步提升自己的项目管理能力。1.项目管理的五大过程组项目管理的核心是五大过程组,它们是:启动过程组:确定项目的目标、范围、资源需求和项目团队,制定项目章程。......
  • Grafana:监控PostgreSQL数据运维新利器
    在数据驱动的业务环境中,数据库的性能监控是确保数据流畅和系统稳定的关键。PostgreSQL,作为强大的开源关系型数据库,其性能监控尤为重要。Grafana,一个开源的数据可视化和监控平台,提供了一个直观的界面来监控和分析数据。本文将带您了解如何利用Grafana来监控PostgreSQL,让您的数据库......
  • MySQL 数据库约束详解:确保数据完整性与一致性
    MySQL数据库约束详解:确保数据完整性与一致性在数据库设计中,约束(Constraints)是确保数据完整性和一致性的重要工具。MySQL提供了多种约束类型,包括非空约束、唯一约束、主键约束、检查约束、默认约束和外键约束。本文将详细介绍这些约束的作用、常用格式以及如何在创建数据表时熟......
  • 鸿蒙Navigation知识点详解
    Navigation是路由导航的根视图容器,一般作为页面(@Entry)的根容器,包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。Navigation组件适用于模块内和跨模块的路由切换,通过组件级路由能力实现更加自然流畅的转场体验,并提供多种标题栏样式来呈现更好的标题和内容联动效果。一次开发,多......
  • MYSQL事务
    一、什么是事务事务(Transaction)是一组数据库操作的集合,这些操作要么全部执行成功,要么全部不执行。在MySQL中,事务确保了一组数据库操作的原子性,一致性,隔离性和持久性,简称ACID属性。原子性(Atomicity):原子性指事务中的所有操作要么全部执行成功,要么全部不执行。即事务不可......
  • MYSQL中JDBC的使用
    一、JDBC基础概念JDBC是Java中的一组API,用于执行SQL操作(例如CRUD操作:增、删、改、关系),同时可以和各种类型的数据库类型进行连接(MySQL、Oracle、SQLServer等)。JDBC是Java标准库的一部分,提供了与数据库进行交互的抽象接口。JDBC主要包含以下几个核心组件:Driver(驱动程......
  • navicat连接远程服务器docker的mysql容器时连不上报错
    报错:1130-HostxxxisnotallowedtoconnecttothisMySQLserver1.原因是root账户没有远程访问权限,先进mysql容器dockerexec-it你的容器id/bin/bash2.连接数据库,输入你的密码mysql-uroot-p3.切换到mysql数据库usemysql;4.更新用户表:(其中%的意思是允许所有的......