简体   繁体   中英

How to use “group by” and max value into inner join queries?

I have followed query that get data from 3 tables: index_data , data_bin and metrics .

SELECT 
    index_data.host_name,        
    data_bin.value
FROM
    metrics 
INNER JOIN
    index_data ON index_data.id = metrics.index_id 
INNER JOIN
    data_bin ON data_bin.id_metric = metrics.metric_id 
WHERE
    metrics.metric_name = 'avg';

Here are the results:

host_name      |  value
================================  
namenode1           1.125
namenode1           1
namenode1           1
namenode1           1
namenode1           1
namenode1           4.875
namenode1           1
namenode1           0.875
Centreon-Server     2
Centreon-Server     1
Centreon-Server     2
Centreon-Server     1
Centreon-Server     5
Centreon-Server     1
Centreon-Server     1
Centreon-Server     2

My goal is to get only one record per host_name with max value .

So the expected output should be:

 namenode1          4.875
 Centreon-Server    5

How can I achieve this?

Thanks,

I think below will help you

SELECT 
     index_data.host_name,        
     Max(data_bin.value) as value
        FROM metrics 
     inner join index_data ON index_data.id = metrics.index_id 
     inner join data_bin   ON data_bin.id_metric = metrics.metric_id 

where metrics.metric_name = 'avg' AND  
FROM_UNIXTIME(data_bin.ctime) between date('2014-02-05 16:15:24') and date('2014-02-06 16:15:24') 
Group by index_data.host_name;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM