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,考慮將...