Mysql 如何从第一个表中选择所有行,并为从第一个表检索到的每一行获取其他表中所有匹配行的计数
以下是表格 表1Mysql 如何从第一个表中选择所有行,并为从第一个表检索到的每一行获取其他表中所有匹配行的计数,mysql,join,Mysql,Join,以下是表格 表1 price col1 col2 time 10 1 1 10 100 1 1 13 150 1 1 15 表2 id startTm endTm col1 col2 1 12 20 1 1 2 15 26
price col1 col2 time
10 1 1 10
100 1 1 13
150 1 1 15
表2
id startTm endTm col1 col2
1 12 20 1 1
2 15 26 1 1
3 11 13 1 1
我希望表2中的所有行满足startTm>=x和endTm这是您想要的吗
SELECT startTm, endTm, COUNT(price), SUM(price), t3_others, t1_others
FROM
(
SELECT T3.startTm AS startTm, T3.endTm AS endTm, T3.others AS t3_others, T1.price AS price, T1.others AS t1_others
FROM T1
RIGHT JOIN
(
SELECT T2.startTm, T2.endTm, T2.others
FROM T2
WHERE T2.startTm >= 10 AND T2.endTm <= 20 AND T2.col1 = col1_value AND T2.col2 = col2_value
) AS T3
ON T1.time >= T3.startTm AND T1.time <= T3.endTm
) AS T4
GROUP BY startTm, endTm;
根据需要添加其他更多字段。尝试以下查询:
从表1中选择t1.*,t2.*作为t1右键连接表2作为t1.col1=t2.col1上的t2,其中t2.startTm>=‘您的值’和t2.endTm更新了我的问题,以便更好地理解。请看一看@walterI想要表1中的所有价格的总和,这些价格的时间介于表2中已检索行的开始时间和结束时间之间。我已调整了查询。请尝试。它正在工作,但我无法从表2中选择更多的列,因为它们没有聚合。只需在上一个查询之外再添加一个select,然后按startTm和endTm分组,就可以得到您想要的。
startTm endTm totalNo totalPrice some more col
12 20 2 250 ...
11 13 1 100 ...
SELECT startTm, endTm, COUNT(price), SUM(price), t3_others, t1_others
FROM
(
SELECT T3.startTm AS startTm, T3.endTm AS endTm, T3.others AS t3_others, T1.price AS price, T1.others AS t1_others
FROM T1
RIGHT JOIN
(
SELECT T2.startTm, T2.endTm, T2.others
FROM T2
WHERE T2.startTm >= 10 AND T2.endTm <= 20 AND T2.col1 = col1_value AND T2.col2 = col2_value
) AS T3
ON T1.time >= T3.startTm AND T1.time <= T3.endTm
) AS T4
GROUP BY startTm, endTm;