MYSQL使用多行划分来自多个子查询的结果
我有两个查询,第一个查询生成一个类似MYSQL使用多行划分来自多个子查询的结果,mysql,subquery,Mysql,Subquery,我有两个查询,第一个查询生成一个类似 SELECT COUNT(channel) AS messages FROM Chats WHERE message LIKE '%word%' GROUP BY UNIX_TIMESTAMP(time) DIV 3600 +-----+ | 123 | | 127 | | 332 | | 219 | +-----+ 第二个呢 SELECT COUNT(channel) AS messages FROM Chats GROUP BY UNIX_TIMEST
SELECT COUNT(channel) AS messages FROM Chats WHERE message LIKE '%word%' GROUP BY UNIX_TIMESTAMP(time) DIV 3600
+-----+
| 123 |
| 127 |
| 332 |
| 219 |
+-----+
第二个呢
SELECT COUNT(channel) AS messages FROM Chats GROUP BY UNIX_TIMESTAMP(time) DIV 3600
+-----+
| 222 |
| 579 |
| 590 |
| 377 |
+-----+
现在,我想将第一个表中的所有结果除以第二个表中的相应值(结果四舍五入,必须手动计算):
以下是通过以下查询完成整个任务的一种方法:
SELECT
(dividendTable.messages / divisorTable.messages) AS result
FROM
(
SELECT
firstTable.messages,
@rn1 := @rn1 + 1 AS row_number
FROM
(
SELECT
COUNT(channel) AS messages
FROM Chats
WHERE message LIKE '%word%'
GROUP BY UNIX_TIMESTAMP(time) DIV 3600
) FirstTable, (SELECT @rn1 := 0) var1
) AS dividendTable
INNER JOIN
(
SELECT
secondTable.messages,
@rn2 := @rn2 + 1 AS row_number
FROM
(
SELECT
COUNT(channel) AS messages
FROM Chats
GROUP BY UNIX_TIMESTAMP(time) DIV 3600
) secondTable, (SELECT @rn2 := 0) var2
) AS divisorTable
ON dividendTable.row_number = divisorTable.row_number;
注意:
如果要将结果四舍五入到小数点后的2位,请使用以下内容作为查询的第一行:
SELECT
ROUND((dividendTable.messages / divisorTable.messages),2) AS result
注意:您在查询中没有使用任何ORDER BY。您可能会出现随机行为。您可以添加一个预期结果的示例吗?显示原始表、原始查询和预期输出。输出的顺序是什么?您在查询中没有使用任何<代码>ORDER BY。你可能会有随机行为@BDA@1000111这不是我目前最大的担忧,以后再做细节,所以你想在一次查询中完成整个事情?@b谢谢,你的回答帮了我很大的忙!最后一句是最重要的。欢迎你加入BDA,谢谢你强调这一点@草莓
SELECT
ROUND((dividendTable.messages / divisorTable.messages),2) AS result