在 table (mysql) 中自动计算范围
Calculate the range automatically in a table (mysql)
例如,我有一个 table1:
+------+----------+
| num | duration |
+------+----------+
| 10 | 0 |
| 15 | 1 |
| 5 | 2 |
| 7 | 3 |
| 12 | 4 |
| 13 | 5 |
| 3 | 6 |
+------+----------+
在这个table中,"duration"的取值范围是0到6。"num"表示有多少个flow的session duration是0或者1或者2等等。例如第一行表示有 10 个流,它们的会话持续时间为 0。第二行表示有 15 个流,它们的会话持续时间为 1。
现在,我想计算有多少流的会话持续时间大于 0、大于 1、大于 2、大于 3 等
select *
from
( select sum(num) as totalnum,duration
from table1
where duration >=
(
select duration from table1
)
)as a;
但是 mysql 提到 "Subquery returns more than 1 row"。
我想要 table 喜欢:
+-----------+----------+
| totalnum | duration |
+-----------+----------+
| 65 | 0 |
| 55 | 1 |
| 40 | 2 |
| 35 | 3 |
| 28 | 4 |
| 16 | 5 |
| 3 | 6 |
+-----------+----------+
这个table的意思是:比如第一行表示有65个流的session duration大于0。
第二行表示有 55 个流的会话持续时间大于 1。
我该怎么办?
尝试将 table 加入自身,其中加入标准是持续时间大于或等于正在处理的 FROM 条目中的持续时间的条目:
SELECT SUM(T1up.num) AS totalnum, T1.duration
FROM table1 AS T1
LEFT JOIN table1 AS T1up
ON T1up.duration>=T1.duration
GROUP BY T1.duration;
例如,我有一个 table1:
+------+----------+
| num | duration |
+------+----------+
| 10 | 0 |
| 15 | 1 |
| 5 | 2 |
| 7 | 3 |
| 12 | 4 |
| 13 | 5 |
| 3 | 6 |
+------+----------+
在这个table中,"duration"的取值范围是0到6。"num"表示有多少个flow的session duration是0或者1或者2等等。例如第一行表示有 10 个流,它们的会话持续时间为 0。第二行表示有 15 个流,它们的会话持续时间为 1。 现在,我想计算有多少流的会话持续时间大于 0、大于 1、大于 2、大于 3 等
select *
from
( select sum(num) as totalnum,duration
from table1
where duration >=
(
select duration from table1
)
)as a;
但是 mysql 提到 "Subquery returns more than 1 row"。 我想要 table 喜欢:
+-----------+----------+
| totalnum | duration |
+-----------+----------+
| 65 | 0 |
| 55 | 1 |
| 40 | 2 |
| 35 | 3 |
| 28 | 4 |
| 16 | 5 |
| 3 | 6 |
+-----------+----------+
这个table的意思是:比如第一行表示有65个流的session duration大于0。 第二行表示有 55 个流的会话持续时间大于 1。 我该怎么办?
尝试将 table 加入自身,其中加入标准是持续时间大于或等于正在处理的 FROM 条目中的持续时间的条目:
SELECT SUM(T1up.num) AS totalnum, T1.duration
FROM table1 AS T1
LEFT JOIN table1 AS T1up
ON T1up.duration>=T1.duration
GROUP BY T1.duration;