如何在 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
";
解决了我的问题。
感谢您的协助...
我有一个 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
";
解决了我的问题。 感谢您的协助...