LeetCode sql每日刷題2 按照出現頻率

2021-09-29 17:01:03 字數 4721 閱讀 5535

1205. 每月交易ii(中等)

transactions 記錄表

chargebacks 表

±---------------±--------+

| column name | type |

±---------------±--------+

| trans_id | int |

| charge_date | date |

±---------------±--------+

退單包含有關放置在事務表中的某些事務的傳入退單的基本資訊。

trans_id 是 transactions 表的 id 列的外來鍵。

每項退單都對應於之前進行的交易,即使未經批准。

編寫乙個 sql 查詢,以查詢每個月和每個國家/地區的已批准交易的數量及其總金額、退單的數量及其總金額。

注意:在您的查詢中,給定月份和國家,忽略所有為零的行。

查詢結果格式如下所示:

chargebacks 表:

±-----------±-----------+

| trans_id | trans_date |

±-----------±-----------+

| 102 | 2019-05-29 |

| 101 | 2019-06-30 |

| 105 | 2019-09-18 |

±-----------±-----------+

思路

2.先找出退款的訂單,使用inner join,**如下

select

date_format( c.trans_date,

'%y-%m')as

month

, t.country,

amount,

'chargeback'

astype

from

transactions

as t

inner

join chargebacks as c on t.id = c.trans_id

select date_format(t.trans_date,

'%y-%m')as

month

, t.country,amount,

astype

from

transactions

as t

where state=

4.合併兩個 select 語句結果集

select

month

asmonth

, country as country,

sum(if(

type=,

1,0)

)sum(if

(type

=, amount,0)

)sum(if

(type

='chargeback',1

,0))

as chargeback_count,

sum(if(

type

='chargeback'

, amount,0)

)as chargeback_amount

from((

select

date_format( t.trans_date,

'%y-%m')as

month

, t.country,

amount,

astype

from

transactions

as t

where

state =

)union

all(

select

date_format( c.trans_date,

'%y-%m')as

month

, t.country,

amount,

'chargeback'

astype

from

transactions

as t

inner

join chargebacks as c on t.id = c.trans_id

))as tt

group

by tt.

`month`,

tt.country;

569.員工薪水中位數

employee 表包含所有員工。employee 表有三列:員工id,公司名和薪水。

±----±-----------±-------+

|id | company | salary |

±----±-----------±-------+

|1 | a | 2341 |

|2 | a | 341 |

|3 | a | 15 |

|4 | a | 15314 |

|5 | a | 451 |

|6 | a | 513 |

|7 | b | 15 |

|8 | b | 13 |

|9 | b | 1154 |

|10 | b | 1345 |

|11 | b | 1221 |

|12 | b | 234 |

|13 | c | 2345 |

|14 | c | 2645 |

|15 | c | 2645 |

|16 | c | 2652 |

|17 | c | 65 |

±----±-----------±-------+

請編寫sql查詢來查詢每個公司的薪水中位數。挑戰點:你是否可以在不使用任何內建的sql函式的情況下解決此問題。

±----±-----------±-------+

|id | company | salary |

±----±-----------±-------+

|5 | a | 451 |

|6 | a | 513 |

|12 | b | 234 |

|9 | b | 1154 |

|14 | c | 2645 |

±----±-----------±-------+

1.對每個公司 group by 分組,確定中位數區間,統計每組的個數為n,當n為偶數時中位數為下標floor((n-1)/2)和n/2位置處的平均是,下標從 0 開始

select

e.company,

floor(

(count(*

)-1)

/2)as beg,if(

count(*

)%2=

1,0,

1)as cnt

from

employee as e

group

by e.company

select e1.id,e1.company,e1.salary,

count

(e2.salary)

as`trank`

from employee as e1

left

join employee as e2

on(e1.company = e2.company and

(e1.salary = e2.salary and e1.id>e2.id or e1.salary > e2.salary)

)group

by e1.id,e1.company,e1.salary

order

by e1.company,e1.salary

select

b.id,

b.company,

b.salary

from

(select

e.company,

floor(

(count(*

)-1)

/2)as beg,if(

count(*

)%2=

1,0,

1)as cnt

from

employee as e

group

by e.company

)as a

join

(select

e1.id,

e1.company,

e1.salary,

count

( e2.salary )

as trank

from

employee as e1

left

join employee as e2 on

( e1.company = e2.company

and( e1.salary = e2.salary and e1.id > e2.id or e1.salary > e2.salary )

)group

by e1.id,

e1.company,

e1.salary

order

by e1.company,

e1.salary

)as b on

( a.company = b.company and b.trank between a.beg and

( a.beg + a.cnt )

);

每日刷題 打家劫舍

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 例 1 輸入...

每日刷題總結

public class parent voidm2 protected voidm3 public static voidm4 a.子類中一定能夠繼承和覆蓋parent類的m1方法 b.子類中一定能夠繼承和覆蓋parent類的m2方法 c.子類中一定能夠繼承和覆蓋parent類的m3方法 d.子類...

leetcode每日刷題

題目描述 有效括號字串為空 a 或 a b,其中 a 和 b 都是有效的括號字串,代表字串的連線。例如,和 都是有效的括號字串。如果有效字串 s 非空,且不存在將其拆分為 s a b 的方法,我們稱其為原語 primitive 其中 a 和 b 都是非空有效括號字串。給出乙個非空有效字串 s,考慮將...