【发布时间】:2021-02-05 08:05:26
【问题描述】:
我有一张这样结构的大桌子:
myTable: otherTable:
+----------+------+-------+ +-----+-------+-----+
| Date | Type | Ref | | ID | Field | Ref |
+----------+------+-------+ +-----+-------+-----+
| 1/1/2020 | 1 | XXX | | 1 | Val1 | XXX |
| 1/1/2020 | 2 | XXX | | 2 | Val2 | YYY |
| 1/2/2020 | 1 | YYY | | 3 | Val3 | AAA |
| ... | ... | ... | | ... | val4 | BBB |
+----------+------+-------+ +-----+-------+-----+
我想用单个 Ref 值计算特定日期间隔内具有特定类型的所有行。
Result:
+-----+-------+-----+-------+
| ID | Field | Ref | Count |
+-----+-------+-----+-------+
| 1 | Val1 | XXX | 3 |
| 2 | Val2 | YYY | 1 |
| 3 | Val3 | AAA | 0 |
| ... | val4 | BBB | 2 |
+-----+-------+-----+-------+
这是在日期过滤器之后计算值的最佳方法吗?
SELECT otherTable.* ,
( SELECT Count(*)
FROM myTable
WHERE myTable.Type IN ( 2, 12 )
AND myTable.Ref = otherTable.Ref
AND Date BETWEEN Dateadd('d', now(), -7) AND Dateadd('d', now(), +7)
) as myCount
FROM otherTable
或者这个?
SELECT otherTable.* ,
( SELECT Count(*)
FROM ( SELECT * FROM myTable
WHERE myTable.Type IN ( 2, 12 )
AND myTable.Ref = otherTable.Ref
AND Date BETWEEN Dateadd('d', now(), -7) AND Dateadd('d', now(), +7)
)
) as myCount
FROM otherTable
我正在学习 SQL 并寻找保存性能的方法。 提前谢谢!
【问题讨论】:
-
额外的子查询通常不会提高性能。在许多情况下,这没有什么区别。