簡體   English   中英

返回一列具有最大值的行,而另一列具有給定值

[英]Return rows with the highest value on one column corresponding to a given value in another

有一個名為raw_contacts的MySQL表,其結構如下:

ID (primary auto-increment, int)
PHONE (composite unique with NAME, varchar)
NAME (composite unique with PHONE, varchar)
FREQUENCY (int)
Composite unique key is named PHONENUM

我正在嘗試編寫查詢以返回FREQUENCY列中具有PHONE的任何給定值的對應值最高的行。 我確實找到了相關的帖子,但是接受的答案對我的情況不起作用,因為我有兩列的復合鍵來進行檢查。

僅作說明,請考慮以下示例:

1 1234 John 6
2 1234 Dave 2
3 2199 Bill 9
4 1878 Dani 3
5 1234 Cory 7
6 1234 Gore 5
7 3319 Cory 1

在上面的示例中針對1234運行,查詢應返回第5行,因為Cory在FREQUENCY列中具有該編號的最高計數。

這是我想出的,效果很好:

select RC.ID, RC.PHONE, RC.FREQUENCY, RC.NAME
from `raw_contacts` RC
inner join(
    select PHONE, max(FREQUENCY) FREQUENCY
    from `raw_contacts`
    where PHONE="11111"
    group by PHONE
) RC2 on RC.PHONE = RC2.PHONE and RC.FREQUENCY = RC2.FREQUENCY
limit 1

由於此任務需要在具有數百萬條記錄的表上以很高的頻率運行,因此是否還有其他資源友好的查詢? 我正在尋找最優化的方法!

PS如果排位賽超過一排,我只需要其中一排,那沒關系。

join在DB中是一項昂貴的操作,我認為您必須盡可能避免使用它!!! 我建議使用以下查詢並將其結果與您的查詢進行比較。

select * from `raw_contacts` RC1 where PHONE="11111" 
and FREQUENCY>=all (select FREQUENCY from `raw_contacts` RC2 where RC2.PHONE=RC1.PHONE) LIMIT 1

您還可以考慮在表上使用不同類型的索引( 此處是一個很好的索引),以加快特殊查詢和更頻繁查詢的速度

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM