我的数据库中有4个表,如t1,t2,t3,t4我想从条件中计数id,例如orderId = 1,我不知道我怎么做。有人可以帮帮我吗?它的基本问题,但我是SQL查询的新手。 我使用此查询并显示四列我只需要一个将我的总cont设置为另一个选择查询。
(SELECT
(SELECT COUNT(id)
FROM c.fa
WHERE foruser = 1
) AS FA ,
(SELECT COUNT(id)
FROM c.ia
WHERE foruser = 1
) AS IA ,
(SELECT COUNT(id)
FROM c.la
WHERE foruser = 1
) AS LA ,
(SELECT COUNT(id)
FROM c.ta
WHERE foruser = 1
) AS TA ,
(SELECT SUM(FA+IA+LA+TA)) AS TOTAL
)
答案 0 :(得分:0)
您的查询基本上是正确的,但要获得总数,您需要另一个子查询:
SELECT x.*, (FA + IA + LA + TA) as total
FROM (SELECT (SELECT COUNT(id) FROM c.fa WHERE foruser = 1) AS FA ,
(SELECT COUNT(id) FROM c.ia WHERE foruser = 1) AS IA,
(SELECT COUNT(id) FROM c.la WHERE foruser = 1) AS LA,
(SELECT COUNT(id) FROM c.ta WHERE foruser = 1) AS TA
) x;
问题是您无法在同一SELECT
中重复使用列别名。
以上只是编写查询的一种方法。通常,子查询放在FROM
子句中,允许:
SELECT FA.cnt, IA.cnt, LA.cnt, TA.cnt,
(FA.cnt + IA.cnt + LA.cnt + TA.cnt) as total
FROM (SELECT COUNT(id) as cnt FROM c.fa WHERE foruser = 1) FA CROSS JOIN
(SELECT COUNT(id) as cnt FROM c.ia WHERE foruser = 1) IA CROSS JOIN
(SELECT COUNT(id) as cnt FROM c.la WHERE foruser = 1) LA CROSS JOIN
(SELECT COUNT(id) as cnt FROM c.ta WHERE foruser = 1) TA;
答案 1 :(得分:0)
我找到了答案:
SELECT SUM(FA+IA+LA+TA) AS TOTAL FROM (
(SELECT COUNT(id) AS FA FROM c.f WHERE foruser = 1 ) AS FAA,
(SELECT COUNT(id) AS IA FROM c.i WHERE foruser = 1) AS IAA ,
(SELECT COUNT(id) AS LA FROM c.l WHERE foruser = 1 ) AS LAA ,
(SELECT COUNT(id) AS TA FROM c.t WHERE foruser = 1 ) AS TAA
)
对于像我这样的SomeOne需要这个。