我有一张交易表,包含买家和卖家的字段。我想要一个查询,为每个参与交易的人输出一行,其中一列表示该人已成为买家的次数,另一列表示该人成为卖家的次数。
我目前正在实现我想要的结果:
SELECT u.user_id,
(SELECT COUNT(*) FROM transactions AS b WHERE b.buyer = u.user_id),
(SELECT COUNT(*) FROM transactions AS s WHERE s.seller = u.user_id)
FROM users AS u;
这很好用,但它让我觉得愚蠢而且不必要地慢。当我开始想要设置条件时 - 比如说,如果我想计算一个人在3月1日到3月31日期间以不到1美元的价格购买或卖掉一支铅笔的次数 - 那么查询就会变得更加愚蠢。
我确定有更好的方法,但我花了一段时间寻找并且没有想出更多的东西。在此先感谢您的帮助。
答案 0 :(得分:1)
您的查询非常合理,很可能是运行此查询的最快方法。您希望确保INSERT ignore INTO tab1 ('col1_', 'col2_') SELECT 'col1','col2' FROM tab2
上有两个索引:transactions
和transactions(buyer)
。
另一种方法是在使用显式连接之前汇总数据:
transactions(seller)
但是,您的查询可能是表达和运行此逻辑的最佳方式。