SQL - 在不使用 COUNT() 的情况下计算一个 ID 在另一个 table 中的次数
SQL - Count number of times an ID is in another table without using COUNT()
http://sqlfiddle.com/#!9/74844b/44
我有一个 table,每一行都是一个唯一的 ID。我有另一个 table,其中包含按 ID 过去出现的每个实例排序的聚合行。
如何在不使用 COUNT 的情况下计算 table 的行数?我可以使用 JOIN 或其他任何东西。
订单
Date
USERID
2021-06
3333
2021-09
4444
聚合
Date
User
TransactID
2021-06
3333
1234
2021-03
3333
XXXX
2021-02
3333
XXXX
2021-09
4444
1238
2021-05
4444
XXXX
2021-01
4444
XXXX
结果
TXN_ID
USERID
USERID_count
1234
33333
3
1238
44444
3
你可以像这样使用 sum
SUM(x>= 0 and y<= 40) AS count_xx
或 table 行像这样
SELECT TABLE_ROWS from INFORMATION_SCHEMA.TABLESWHERE TABLE_NAME = 'foo'
甚至found_rows
SELECT SQL_CALC_FOUND_ROWS * FROM fooWHERE bar="value" LIMIT 10;SELECT FOUND_ROWS();
您可以尝试使用 OUTER JOIN
聚合函数而不是子查询。
查询 1:
SELECT
MAX(s.TXN_ID) TXN_ID, a.UserID, COUNT(*) AS USERID_count
FROM
AGG a
LEFT JOIN
SDP s ON a.USERID = s.USERID
AND a.DT = s.DT
GROUP BY
a.UserID
| TXN_ID | UserID | USERID_count |
|--------|--------|--------------|
| 1234 | 33333 | 3 |
| 1238 | 44444 | 3 |
好吧,我认为您已经在 count_rank 列中获得了该信息:
select SDP.USERID, max(Count_rank)+1
from SDP left join AGG on AGG.UserID = SDP.USERID
group by SDP.USERID
http://sqlfiddle.com/#!9/74844b/44
我有一个 table,每一行都是一个唯一的 ID。我有另一个 table,其中包含按 ID 过去出现的每个实例排序的聚合行。
如何在不使用 COUNT 的情况下计算 table 的行数?我可以使用 JOIN 或其他任何东西。
订单
Date | USERID |
---|---|
2021-06 | 3333 |
2021-09 | 4444 |
聚合
Date | User | TransactID |
---|---|---|
2021-06 | 3333 | 1234 |
2021-03 | 3333 | XXXX |
2021-02 | 3333 | XXXX |
2021-09 | 4444 | 1238 |
2021-05 | 4444 | XXXX |
2021-01 | 4444 | XXXX |
结果
TXN_ID | USERID | USERID_count |
---|---|---|
1234 | 33333 | 3 |
1238 | 44444 | 3 |
你可以像这样使用 sum
SUM(x>= 0 and y<= 40) AS count_xx
或 table 行像这样
SELECT TABLE_ROWS from INFORMATION_SCHEMA.TABLESWHERE TABLE_NAME = 'foo'
甚至found_rows
SELECT SQL_CALC_FOUND_ROWS * FROM fooWHERE bar="value" LIMIT 10;SELECT FOUND_ROWS();
您可以尝试使用 OUTER JOIN
聚合函数而不是子查询。
查询 1:
SELECT
MAX(s.TXN_ID) TXN_ID, a.UserID, COUNT(*) AS USERID_count
FROM
AGG a
LEFT JOIN
SDP s ON a.USERID = s.USERID
AND a.DT = s.DT
GROUP BY
a.UserID
| TXN_ID | UserID | USERID_count |
|--------|--------|--------------|
| 1234 | 33333 | 3 |
| 1238 | 44444 | 3 |
好吧,我认为您已经在 count_rank 列中获得了该信息:
select SDP.USERID, max(Count_rank)+1
from SDP left join AGG on AGG.UserID = SDP.USERID
group by SDP.USERID