統計報警點位所屬裝置的裝置報警總數top100的裝置的報警總數
需要先找出所有裝置的報警次數,按照報警次數進行排序,取前100,然後再對前100的裝置的報警次數進行統計
將報警次數top100的裝置找出來,再對整個資料進行乙個inner join,再疊加乙個count。可以計算出
select count(1)
from
(select substring_index(alarm_description,
" ",1) siad,id,alarm_description from equipment_history_alarm_record where gc_id='ahaqwy' and substring(alarm_time,1,10)>='2020-01-01' and substring(alarm_time,1,10)
) t1
inner join
(select substring_index(alarm_description,
" ",1) siad ,count(1) cnt from equipment_history_alarm_record where gc_id='ahaqwy' and substring(alarm_time,1,10)>='2020-01-01' and substring(alarm_time,1,10)
group by siad order by cnt desc limit 100) t2
on t1.siad=t2.siad;
計算時間為1.733s
將報警次數top100的裝置找出來,將其作為主表,再對這個主表進行sum運算
select sum(t.cnt)
from
(select substring_index(alarm_description,
" ",1) siad ,count(1) cnt from equipment_history_alarm_record where gc_id='ahaqwy' and substring(alarm_time,1,10)>='2020-01-01' and substring(alarm_time,1,10)
group by siad order by cnt desc limit 100) t;
計算時間為0.867秒
記一次SQL優化
問題發生在關聯主表a 4w資料量 和副表b 4w資料量 關聯欄位都是openid 當時用的是 left join 直接跑sql,卡死 伺服器也是差 優化1 改left join 為join,兩者區別就是left join查詢時已主表為依據,該是幾條就幾條 就算副表沒有關聯的資料 join如果副表沒有...
一次簡單的SQL語句優化
最近寫了乙個查詢語句,為了做這個查詢建立了一些view,最終的view中包含了另外兩個view。這個sql的查詢要傳入乙個條件語句,最後發現這個sql語句會隨著資料量的增加而越來越耗時。即使為所有可以建立索引的地方都已經建立了索引也沒有用。用explain解釋之後發現這個語句在執行其中的子查詢時是查...
記一次sql查詢
效果圖 要查詢出如上圖的效果 知識點.1.多表巢狀查詢.2.輸出查詢結果,group concat函式 3.關聯查詢 select t1.學校,case when t1.年級 2017 then 1年級 when t1.年級 2016 then 2年級 when t1.年級 2015 then 3年...