首页 > 解决方案 > 难点单/分组/计数

问题描述

我有 3 个简单的表,但我的查询很困难

卖家表:

seller_id | name
1           john
2           paul
5           fred
6           robert
etc ...

交易表(目前只有 3 个值):

trans_id | name
1          BUY
2          SELL
3          EXCHANGE

操作表:

seller_id | trans_id | datetime
2           1          ....
2           2          ....
6           1          ....
2           3          ....
6           1          ....

该表记录了所有卖家的交易和他们的时刻。

我想获得,在最后一天,或者在某个时间间隔内

我已经尝试了很多事情,奇怪的事情 taht mysql 不喜欢,但我无法成功......谢谢!

标签: mysqlsql

解决方案


这是您第一次查询的解决方案,即“卖家名称,购买交易订单数量按间隔内的购买交易数量”:

SELECT 
     S.name,
     COUNT(1) AS total
FROM operations O
JOIN sellers S on O.seller_id = S.seller_id
JOIN transactions T on O.trans_id = T.trans_id
WHERE O.datetime >= CURDATE() AND T.name = 'BUY'
GROUP BY S.name
ORDER BY total

显然,第二个查询几乎相同,where 子句只是略有变化,见以下内容:

SELECT 
     S.name,
     COUNT(1) AS total
FROM operations O
JOIN sellers S on O.seller_id = S.seller_id
JOIN transactions T on O.trans_id = T.trans_id
WHERE O.datetime >= CURDATE()-1 AND T.name IN ('BUY','SELL')
GROUP BY S.name
ORDER BY total

老实说,您甚至可以删除与事务表的连接并在 where 子句中使用 O.trans_id 。

在此处查看演示


推荐阅读