Mysql选择sum()和从多个表分组

时间:2013-05-19 09:58:14

标签: mysql group-by

表1

---------------------------------------
| id | item | MU | quantity | file_id |
---------------------------------------
| 1  |item1 | oz | 3.5      | 003     |
| 2  |item2 | kg | 1.1      | 001     |
| 3  |item1 | oz | 0.2      | 001     |
| 3  |item1 | kg | 3        | 001     |

表2

 ----------------------------
 | id | date      | file_id |
 ----------------------------
 | 1  |timestamp1 | 001 |
 | 2  |timestamp2 | 002     |
 | 3  |timestamp3 | 003     |

我要做的是选择具有相同MU的每组物品的数量总和。我设法用这个查询做到了。

$query = "SELECT item,SUM(quantity) from table1 GROUP BY item,mu";

with a great result, exactly what i wanted
----------------------------------
| id | item | MU | SUM(quantity) |
----------------------------------
| 1  |item1 | oz | 3.7           |
| 2  |item2 | kg | 1.1           |
| 3  |item1 | kg | 3             |

但是现在,我如何才能他们的file_id日期在两个时间戳之间的行?

2 个答案:

答案 0 :(得分:3)

您可以使用INNER JOIN加入这两个表格。查询结果只显示itemsTable1的{​​{1}},这两个日期之间匹配,否则它不会包含在结果列表中。

SELECT  MIN(a.iD) ID, a.item, a.MU,
        SUM(a.quantity) totalQuantity
FROM    table1 a
        INNER JOIN table2 b
            ON a.file_ID = b.file_ID 
WHERE   b.date BETWEEN startDateHere AND endDateHere 
GROUP   BY a.item, a.MU

要进一步了解联接,请访问以下链接:

答案 1 :(得分:2)

您可以使用LEFT JOIN设法实现此目的,并在单个查询中加入两个表,只需将initialdatefinaldate替换为您当前的时间戳

$query = "SELECT a.id, a.item, a.mu, SUM(a.quantity) as total_quantity from table1 a left join table2 b ON a.file_id = b.file_id WHERE b.date BETWEEN initialdate AND finaldate GROUP BY a.item,a.mu";