【问题标题】:How to select All the rows from first table and get count of all the matching rows from other table for each row retrived from first table如何从第一个表中选择所有行并从第一个表中检索到的每一行从其他表中获取所有匹配行的计数
【发布时间】:2018-02-01 22:15:41
【问题描述】:

以下是表格

表 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        1        1
3      11          13        1        1

我希望表 2 中的所有行都满足 startTm >= x 和 endTm

类似的东西-

SELECT (@sTime:=T2.startTm) AS startTm,JT.totalNo, JT.totalPrice, 
(@eTime:=T2.endTm) AS endTm 
some more columns FROM table 2 AS T2
  LEFT JOIN (SELECT COUNT(id) AS totalNo,col1, col2 SUM(price) AS 
  totalPrice FROM table 1 WHERE time BETWEEN @sTime AND @eTime GROUP 
  BY col1, col2)
  AS JT ON JT.col1 = T2.col1
WHERE T2.startTm >= some value AND T2.endTm <= some value.

没有相关的外键。我没有得到正确的结果。是怎么做到的?

编辑

我想要指定时间范围内表 2 中的所有记录假设 startTm >= 10 到 endTm

startTm     endTm     totalNo     totalPrice     some more col
12          20        2           250            ...
11          13        1           100            ...

要计算总价格和总数,我要考虑该特定行的 startTm 和 endTime。

【问题讨论】:

    标签: mysql join


    【解决方案1】:

    这是你想要的吗?

    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;
    

    根据需要添加其他更多字段。

    【讨论】:

    • 更新了我的问题以便更好地理解。请看看@walter
    • 我想要表 1 中所有价格的总和,其时间介于表 2 中已检索行的开始时间和结束时间之间。
    • 我已经调整了我的查询。请尝试一下。
    • 它正在工作,但我无法从表 2 中选择更多列,因为它们没有聚合。
    • 只需在上一个查询之外再添加一个SELECT,然后按 startTm 和 endTm 分组,你就会得到你想要的。
    【解决方案2】:

    尝试以下查询:

    从表 1 中选择 t1.* , t2.* 作为 t1 RIGHT JOIN 表 2 作为 t2 ON t1.col1 = t2.col1 WHERE t2.startTm >= 'your value' AND t2.endTm

    【讨论】:

      猜你喜欢
      • 2013-06-04
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 2021-01-07
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多