我有3个表 - 用户表,book1表,book2表。
用户表就像这样 -
user_id | gender | l_name | f_name
-------- -------- -------- -------
1 male Doe Jon
2 female Xu Jini
3 female Din Jane
book1 table -
b_id | user_id | amount | date
----- --------- -------- ----------
1 3 98.30 2014-05-14
2 1 65.70 2014-05-07
3 2 14.40 2014-05-06
4 2 55.60 2014-05-07
book2 table -
b_id | user_id | amount | date
----- --------- -------- ----------
1 2 38.20 2014-04-06
2 3 84.40 2014-04-02
3 3 31.30 2014-04-12
4 1 74.40 2014-05-06
用户提供日期范围作为输入,我想计算该日期范围的销售计数(COUNT),总金额(SUM)和最大日期(MAX)。在此之后,我想将此数据连接到用户表,并使用user_id获取性别和名称。
我编写了这个查询来获取book1和book2 tables-
中给定日期范围的数据SELECT * FROM book1
WHERE date between '2014-04-02' and '2014-05-15'
UNION ALL
SELECT * FROM book2
WHERE date between '2014-04-02' and '2014-05-15'
ORDER BY customer_id;
通过这个我得到book1和book2表中满足日期范围的所有行。现在我应该使用子查询或其他东西来达到目标。我认为sql应该小心,直到从书桌上获得计数,总和和最大值。然后,应该在PHP中完成与用户表的连接。我在正确的道路上吗?一切都可以在SQL中完成吗?我有点失落。
答案 0 :(得分:3)
是的,您可以使用普通JOIN
在SQL中执行此操作。
这基本上会让所有用户在这段时间内加入他们各自的金额。之后,结果按用户分组,以便我们可以总结金额。
SELECT u.user_id, u.l_name, u.f_name, SUM(x.amount) `total amount`
FROM user u
JOIN (
SELECT user_id, date, amount FROM book1
UNION ALL
SELECT user_id, date, amount FROM book2
) x
ON u.user_id = x.user_id
AND x.date between '2014-04-02' and '2014-05-15'
GROUP BY u.l_name, u.f_name,u.user_id
作为旁注,了解联接实际上是有效使用SQL数据库的必要条件。