表: 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港元。雖然這個訊息被視為利好,但不...