日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

HackerRank笔记 - SQL Server

發布時間:2023/12/20 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HackerRank笔记 - SQL Server 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • Easy
      • 1. 返回ID為偶數的行 - `(id % 2) = 0`
      • 2. 返回(向上/向下)取整/四舍五入結果
          • 1) `ROUND(num,len)`
          • 2) `CAST(num AS DECIMAL(38,len))`
          • 3) 向上取整`CEILING()`/ 向下取整`FLOOR()`
          • 4) 整理四舍五入/(向上/向下)取整相關方法 ??
      • 3. 畫三角形
          • 循環輸出 `WHILE(con) BEGIN ... END`
          • `varchar` vs `char`
  • Medium
      • 1. 在兩個數之間 LEFT JOIN [table] ON A.col `BETWEEN`B.col1 `AND`B.col2
      • 2. 首字母`LEFT(string,num)` / 大小寫`UPPER()` `LOWER()`
      • 3. `PIVOT`
      • 4. 數學函數


Easy

1. 返回ID為偶數的行 - (id % 2) = 0

select city from station where (id % 2) = 0

Weather Observation Station 3

2. 返回(向上/向下)取整/四舍五入結果

1) ROUND(num,len)
select COUNTRY.Continent,round(avg(CITY.Population),0) from CITY left join COUNTRY on CITY.CountryCode = COUNTRY.Code where COUNTRY.Continent is not null group by COUNTRY.Continent

Average Population of Each Continent

2) CAST(num AS DECIMAL(38,len))
select cast(sum(LAT_N) as decimal(38,2)),cast(sum(LONG_W) as decimal(38,2)) from STATION

Weather Observation Station 2

3) 向上取整CEILING()/ 向下取整FLOOR()
select cast(CEILING(avg(convert(float,salary)) - avg(convert(float,replace(salary,'0','')))) as decimal(38,0)) from EMPLOYEES

The Blunder

4) 整理四舍五入/(向上/向下)取整相關方法 ??

(借助The Blunder的數據)

-- the type of SALARY is INT select sum(salary),count(salary) from EMPLOYEES -- >> 80935 20 -- Then the avg salary should be 4046.75 -- And the avg(salary) returns an INT select avg(salary) from EMPLOYEES -- >> 4046 -- Which means it is ignoring the decimals not rounding select avg(convert(float,salary)) from EMPLOYEES -- >> 4046.75 -- Round up / Round down select CEILING(avg(convert(float,salary))) from EMPLOYEES -- >> 4047.0 select FLOOR(avg(convert(float,salary))) from EMPLOYEES -- >> 4046.0-- Round with some 0s remained select round(avg(convert(float,salary))) from EMPLOYEES -- >> 4047.0 -- CONVERT() it select convert(int,round(avg(convert(float,salary)),0)) from EMPLOYEES -- >> 4047-- Round select cast(avg(convert(float,salary))as decimal(38,0)) from EMPLOYEES -- >> 4047 -- But CAST(... AS INT) ignores the decimals select cast(avg(convert(float,salary))as INT) from EMPLOYEES -- >> 4046

總結:
1 四舍五入:

  • CONVERT(INT, ROUND(num, 0))
  • CAST(num AS DECIMAL(38, len))
  • 2 向上/向下取整:

  • 向上取整CEILING()/ 向下取整FLOOR()
  • CAST(num AS INT) (忽略小數 = 向下取整)
  • 3. 畫三角形

    循環輸出 WHILE(con) BEGIN ... END
    declare @row int declare @begin int, @starline varchar(40), @star char(2) set @row = 1; set @star = '*'; while(@row<=20)beginset @begin = 20;set @starline = '';while(@begin >= @row)beginset @starline = @starline + @star;set @begin = @begin - 1;endprint @starline;set @row = @row + 1;end
    varchar vs char
  • varchar(n) 可變長度字符串數據,n不指定時默認為1。
  • char(n) 固定長度字符串數據,若不足位后面補空字符串,n不指定時默認為1。

  • Medium

    1. 在兩個數之間 LEFT JOIN [table] ON A.col BETWEENB.col1 ANDB.col2

    select case when grade<8 then null else name end as name, grade, marks from (select * from Students S left join Grades G on S.marks between G.min_mark and G.max_mark) t order by grade desc,name

    The Report

    2. 首字母LEFT(string,num) / 大小寫UPPER() LOWER()

    select name+'('+left(occupation,1)+')' from OCCUPATIONS order by name;select 'There are a total of '+convert(varchar,a.num)+' '+lower(a.occupation)+'s.' from (select occupation, count(name) num from OCCUPATIONS group by occupation) a order by num,occupation;

    The PADS

    3. PIVOT

    select min(Doctor), min(Professor),min(Singer), min(Actor) from( select ROW_NUMBER() OVER(PARTITION By Doctor,Actor,Singer,Professor order by name asc) AS Rownum, case when Doctor=1 then name else Null end as Doctor, case when Actor=1 then name else Null end as Actor, case when Singer=1 then name else Null end as Singer, case when Professor=1 then name else Null end as Professor from occupations pivot ( count(occupation) for occupation in(Doctor, Actor, Singer, Professor) ) as p ) temp group by Rownum ;

    Occupations

    PIVOT 語句格式 (摘自MS SQL Docs FROM - Using PIVOT and UNPIVOT):

    SELECT <non-pivoted column>, --不進行透視的列[first pivoted column] AS <column name>, --透視的列[second pivoted column] AS <column name>, --透視的列... --...[last pivoted column] AS <column name> --透視的列 FROM (<SELECT query that produces the data>) --數據AS <alias for the source query> PIVOT ( <aggregation function>(<column being aggregated>) --聚合函數(聚合的列) FOR [<column that contains the values that will become column headers>] --將作為列名的那列數據IN ( [first pivoted column], [second pivoted column], --透視的列... [last pivoted column]) ) AS <alias for the pivot table> --透視表別名 <optional ORDER BY clause>; --(可選)排序從句

    理解:from 之后的才是一個整體,把數據源pivot后再select

    4. 數學函數

  • 絕對值函數ABS(x)和返回圓周率的函數PI()
  • 平方根函數SQRT(x)
  • 獲取隨機函數的函數RAND()和RAND(x)
  • 四舍五入函數ROUND(x,y)
  • 符號函數SIGN(x)
  • 獲取整數的函數CEILING(x)和FLOOR(x)
  • 冪運算函數POWER(x,y)、SQUARE(x)、和EXP(x)
  • 對數的運算LOG(x)和LOG10(x)
  • 角度與弧度相互轉換的函數RANDIANS(x)和DEGREES(x)
  • 正弦函數SIN(x)和反正弦函數ASIN(x)
  • 余弦函數COS(x)和反余弦函數ACOS(x)
  • 正切函數TAN(x),反正切函數ATAN(x)和余切函數COT(x)
  • Sql Server函數全解(二) 數學函數

    總結

    以上是生活随笔為你收集整理的HackerRank笔记 - SQL Server的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。