SELECT
Total_Males, SETTLEMENT_ID, URI, _PARENT_AURI
FROM
(SELECT
COUNT(t2.SEX) as Total_Males, t1.SETTLEMENT_ID, t1.URI,
t2._PARENT_AURI
FROM
PScData t1
INNER JOIN
PscMemberData t2 ON t2._PARENT_AURI = t1.URI
WHERE
t1.SETTLEMENT_ID = '11102002002001'
AND t2.SEX = '1'
GROUP BY
t1.URI, t2._PARENT_AURI, t1.SETTLEMENT_ID) tmp
这是我写的查询。在WHERE
条款中,我已经给出了确切的值 - ' 11102002002001' - 我想与SETTLEMENT_ID
中的每个t1
进行比较。我怎样才能做到这一点?请提供一些解决方案。
此外,查询返回两行计数,即:现在计算两个不同的ID。如何添加两个不同id的结果来获取子查询返回的这两行的总和?
答案 0 :(得分:1)
您的意思是想要与表PScData中的每个Settlement_id进行比较吗?
根据我对该问题的理解,您可以在表PScData上进行自联接或使用以下查询。
此查询将将settlement_id与同一表中的所有settlement_id进行比较。我不明白你为什么要这样做。
请检查脚本,如果我弄错了,请告诉我。
SELECT
SUM(Total_Males) [Total_males], SETTLEMENT_ID,URI, _PARENT_AURI
FROM
(SELECT
COUNT(t2.SEX) as Total_Males, t1.SETTLEMENT_ID, t1.URI,
t2._PARENT_AURI
FROM
PScData t1
INNER JOIN
PscMemberData t2 ON t2._PARENT_AURI = t1.URI
WHERE
t1.SETTLEMENT_ID in (SELECT DISTINCT SETTLEMENT_ID FROM PScData)
AND t2.SEX = '1'
GROUP BY
t1.URI, t2._PARENT_AURI, t1.SETTLEMENT_ID) tmp
group by
SETTLEMENT_ID,URI, _PARENT_AURI
答案 1 :(得分:1)
此处的子查询无效。如果您不需要全部,只需执行连接并过滤出结算。但是你的问题并不清楚你是想过滤它们还是只是匹配它们。用于匹配使用连接的目的。
SELECT COUNT(t2.SEX) as Total_Males, t1.SETTLEMENT_ID, t1.URI, t2._PARENT_AURI
FROM PScData t1
INNER JOIN PscMemberData t2 ON t2._PARENT_AURI = t1.URI
WHERE t2.SEX = '1'
GROUP BY t1.URI, t2._PARENT_AURI, t1.SETTLEMENT_ID
如果您需要将其过滤掉,则需要准备好的和解清单,并在IN
子句中使用WHERE
。您可以使用Common Table Expression展开想要的和解清单,并将其传递给WHERE
条款:
WITH cteSettlements AS (
SELECT SETLLEMENT_ID
FROM PscData
WHERE ? -- apply some criteria
)
SELECT COUNT(t2.SEX) as Total_Males, t1.SETTLEMENT_ID, t1.URI, t2._PARENT_AURI
FROM PScData t1
INNER JOIN PscMemberData t2 ON t2._PARENT_AURI = t1.URI
WHERE t1.SETTLEMENT_ID IN cteSettlements AND t2.SEX = '1'
GROUP BY t1.URI, t2._PARENT_AURI, t1.SETTLEMENT_ID
关于第二个问题 - 如何添加两个不同id的结果来获得这两行的总和? - 你需要使用GROUP BY
子句。据我了解,您实际上不需要对SETTLEMENT_ID
进行分组,因此只需将其从GROUP BY
中删除即可。请记住,您也需要将其从SELECT
列表中删除。
答案 2 :(得分:1)
我找到了查询的解决方案,可以检索结果并总结如下:
SELECT Total_Males, SETTLEMENT_ID
FROM (
SELECT COUNT(t2.SEX) as Total_Males, t1.SETTLEMENT_ID
FROM PScData t1
INNER JOIN PscMemberData t2 ON t2._PARENT_AURI = t1.URI
WHERE t1.SETTLEMENT_ID in (SELECT DISTINCT SETTLEMENT_ID FROM PScData)
AND t2.SEX = '1'
GROUP BY t1.SETTLEMENT_ID
) tmp
答案 3 :(得分:1)
试试,
b