如何在 MySQL 中的人工 table 中获取两列的最大值

How can I get max value of two column in manpulated table in MySQL

我有一个 table,我操纵它创建了一些图表。这里是原文table

    select * from traffic_user_daily;
    +-------------------+------------+-------+---------+----------+
    | username          | cdate      | chour | bytesin | bytesout |
    +-------------------+------------+-------+---------+----------+
    | 00:09:df:89:81:f2 | 2016-05-27 | 16    |   16469 |    10321 |
    | 00:09:df:89:81:f2 | 2016-05-27 | 18    |  599161 |   121796 |
    | 00:09:df:89:81:f2 | 2016-05-27 | 19    |   21058 |    11141 |
    | 00:09:df:89:81:f2 | 2016-05-28 | 08    |   20608 |    72061 |
    | 00:09:df:89:81:f2 | 2016-05-28 | 09    |  359375 |   176809 |

而我 运行 像这样查询:

    SELECT CONCAT(cdate,' ',chour,':00:00') AS ctime ,sum(bytesin*0.000002222) as totalKbpsin, sum(bytesout*0.000002222) as totalKbpsout FROM traffic_user_daily group by cdate,chour HAVING ctime >= now() - INTERVAL 1 DAY

    +---------------------+----------------+----------------+
    | ctime               | totalKbpsin    | totalKbpsout   |
    +---------------------+----------------+----------------+
    | 2016-05-31 10:00:00 | 1230.390102018 |  772.301406580 |
    | 2016-05-31 11:00:00 | 2554.907603688 | 1185.870290000 |
    | 2016-05-31 12:00:00 | 2260.437353658 |  295.407289650 |
    | 2016-05-31 13:00:00 | 3031.315984752 |  316.283035200 |
    | 2016-05-31 14:00:00 | 3872.374530486 |  720.599486178 |

但不知道如何获取 totalKbpsin 和 totalKbpsout 列的最大值。 你能帮我吗? 此致,

根据您的样本数据,请试试这个;)

SELECT main.ctime, main.totalKbpsin, main.totalKbpsout
FROM(
    SELECT CONCAT(cdate,' ',chour,':00:00') AS ctime, SUM(bytesin*0.000002222) AS totalKbpsin, SUM(bytesout*0.000002222) AS totalKbpsout
    FROM traffic_user_daily
    GROUP BY cdate,chour
    HAVING ctime >= NOW() - INTERVAL 1 DAY) main
INNER JOIN (
    SELECT MAX(totalKbpsin) AS totalKbpsin
    FROM (
        SELECT CONCAT(cdate,' ',chour,':00:00') AS ctime, SUM(bytesin*0.000002222) AS totalKbpsin, SUM(bytesout*0.000002222) AS totalKbpsout
        FROM traffic_user_daily
        GROUP BY cdate,chour
        HAVING ctime >= NOW() - INTERVAL 1 DAY) tmp
) maxsin ON main.totalKbpsin = maxsin.totalKbpsin
UNION ALL
SELECT main.ctime, main.totalKbpsin, main.totalKbpsout
FROM(
    SELECT CONCAT(cdate,' ',chour,':00:00') AS ctime, SUM(bytesin*0.000002222) AS totalKbpsin, SUM(bytesout*0.000002222) AS totalKbpsout
    FROM traffic_user_daily
    GROUP BY cdate,chour
    HAVING ctime >= NOW() - INTERVAL 1 DAY) main
INNER JOIN (
    SELECT MAX(totalKbpsout) AS totalKbpsout
    FROM (
        SELECT CONCAT(cdate,' ',chour,':00:00') AS ctime, SUM(bytesin*0.000002222) AS totalKbpsin, SUM(bytesout*0.000002222) AS totalKbpsout
        FROM traffic_user_daily
        GROUP BY cdate,chour
        HAVING ctime >= NOW() - INTERVAL 1 DAY) tmp
) maxsout ON maxsout.totalKbpsout = main.totalKbpsout

我解决了。

$query_IO ="SELECT MAX(totalKbpsin),MAX(totalKbpsout) FROM (SELECT CONCAT(cdate,' ',chour,':00:00') AS ctime ,sum(bytesin*0.000002222) as totalKbpsin, sum(bytesout*0.000002222) as totalKbpsout FROM traffic_user_daily group by cdate,chour HAVING ctime >= now() - INTERVAL 1 DAY) a ";

您可以使用 GREATEST() 函数。

select GREATEST(MAX(totalKbpsin),MAX(totalKbpsout)) from table_a

$query_IO =

SELECT  MAX(totalKbpsin),MAX(totalKbpsout)
    FROM  
      ( SELECT  CONCAT(cdate,' ',chour,':00:00') AS ctime ,sum(bytesin*0.000002222) as totalKbpsin,
                sum(bytesout*0.000002222) as totalKbpsout
            FROM  traffic_user_daily
            group by  cdate,chour
            HAVING  ctime >= now() - INTERVAL 1 DAY
      ) a 

";

解决了我的问题。 感谢您的协助...