LeetCode 574 當選者 (中等)

2021-10-01 04:43:17 字數 2363 閱讀 3819

表: candidate

+-----+---------+

| id  | name    |

+-----+---------+

| 1   | a       |

| 2   | b       |

| 3   | c       |

| 4   | d       |

| 5   | e       |

+-----+---------+  

表: vote

+-----+--------------+

| id  | candidateid  |

+-----+--------------+

| 1   |     2        |

| 2   |     4        |

| 3   |     3        |

| 4   |     2        |

| 5   |     5        |

+-----+--------------+

id 是自動遞增的主鍵,

candidateid 是 candidate 表中的 id.

請編寫 sql 語句來找到當選者的名字,上面的例子將返回當選者 b.

+------+

| name |

+------+

| b    |

+------+

注意:你可以假設沒有平局,換言之,最多只有一位當選者。

審題:查詢被選最多的人的名字。

思考:根據表二,查詢最多id,根據id查詢名字。

解題:解法一

按candidateid分組,統計投票個數,取投票數最高的candidateid。

再連線表candidate,取姓名。

select c.name

from candidate as c join

( select v.candidateid,count(v.id) as cnt

from vote as v

group by v.candidateid

order by cnt desc

limit 0,1

) as a

on (c.id = a.candidateid)

##自己寫

select c.name from candidate as c join (

##根據表2分組,然後查詢最多的id。

select v.candidateid, count(v.id) as cnt

from vote as v

##分組

group by v.candidateid

##排序

limit 0,1

order by cnt desc

) on (c.id = a.candidateid)

解法二

直接連線兩表,再按candidate分組,統計投票數,取最高人。

有個重要的細節是vote表中的某些candidateid可能不在candidate 表中。

因此,需要在外圍過濾掉name是null的行。

select a.name

from(

select c.name

from vote as v left join

candidate as c

on(c.id = v.candidateid)

group by v.candidateid,c.name

order by count(v.id) desc

limit 0,1

) as a

where a.name is not null

##自己寫

select a.name from (

select c.name from vote as v left join

candidate as c on (c.id = v.candidateid)

group by v.candidate, c.name

order by count(v.id) desc

limit 0,1

) as a where a.name is not null;

知識點:

limit用法,選擇第乙個結果。

select * from tablename limit i,n # tablename:表名 # i:為查詢結果的索引值(預設從0開始),當i=0時可省略i # n:為查詢結果返回的數量 # i與n之間使用英文逗號","隔開 # limit n 等同於 limit 0,n

cdh5 7 4上hive的配置

將hive服務都安裝到hadoop manager2上 列表所示 並在所有機器上存放mysql驅動,存放位置 opt cloudera parcels cdh lib hive lib 選擇hadoop manager1上的mysql 選擇預設路徑 1 在hive安裝集群中輸入一下命令,登入hive...

亂搞 AOJ 574 愛就大聲說出來

description 時間是一把刻刀,也是無情的流水。它曾經用它鋒利的刀刃深深刻進 ff 心裡的那個女孩,也被流年洗刷得只剩下模糊的影子。時隔一年之後,逐漸從往年的心事中走出來的 ff 邂逅了另乙個讓他心動的人。她會是 ff 一直尋找著的那個人嗎?ff 沒辦法知道,他只知道,愛就要大聲說出來。請你...

西班牙電信計畫增持中國網通5 74 股權

因為為西班牙電訊已經持有中國聯通5 的股權,現在只不過表示希望持有合併後的新公司5.5 的股權。西班牙電訊打算增持中國聯通的訊息,對中國聯通股價構成了利好刺激,並一度公升至12.98港元,現報12.86港元,漲4.4 跑贏大市。即將併入的網通更漲5.5 報19.26港元。雖然這個訊息被視為利好,但不...