你能帮我解决我在 postgresql 上的功能吗?我想要一个变化率

问题描述 投票:0回答:0

这是我的代码:

WITH 
ventes_1er as(
SELECT COUNT(DISTINCT nature_mutation) as nb1
                FROM BIEN
                JOIN MUTATION ON MUTATION.ID_BIEN = BIEN.ID_BIEN
                WHERE date_mutation>'31/03/2020'),
                
ventes_2nd as(
SELECT COUNT(DISTINCT nature_mutation) as nb2
FROM BIEN
JOIN MUTATION ON MUTATION.ID_BIEN = BIEN.ID_BIEN
WHERE date_mutation<='31/03/2020')
                
SELECT (((nb2-nb1)/(cast(nb2 as decimal(10,2))))*100) as evolution
FROM ventes_2nd,ventes_1er

我在 postgresql 中,我不明白为什么它返回 0.

Ventes_1er=17393 并且有效 Ventes_2nd=16776 它也有效...

我需要找到我的 ventes_1er 和我的 ventes_2nd 之间的变化率,它应该是 3,677% 你能帮我找出问题所在吗?对不起,我是初学者。

我也试过:

SELECT DISTINCT
    (((SELECT COUNT(nature_mutation)
                FROM BIEN
                JOIN MUTATION ON MUTATION.ID_BIEN = BIEN.ID_BIEN
                WHERE date_mutation>'31/03/2020') - (
                    SELECT COUNT(nature_mutation)
                FROM BIEN
                JOIN MUTATION ON MUTATION.ID_BIEN = BIEN.ID_BIEN
                WHERE date_mutation<='31/03/2020'))/
                    (SELECT COUNT(nature_mutation)
                FROM BIEN
                JOIN MUTATION ON MUTATION.ID_BIEN = BIEN.ID_BIEN
                WHERE date_mutation>'31/03/2020'))*100
    FROM BIEN
    JOIN MUTATION ON MUTATION.ID_BIEN = BIEN.ID_BIEN

但它也返回 0

我也试过:

WITH evolution(ventes_1er,ventes_2nd) AS (
    VALUES((SELECT COUNT(DISTINCT nature_mutation)
                FROM BIEN
                JOIN MUTATION ON MUTATION.ID_BIEN = BIEN.ID_BIEN
                WHERE date_mutation>'31/03/2020'),(
SELECT COUNT(DISTINCT nature_mutation)
FROM BIEN
JOIN MUTATION ON MUTATION.ID_BIEN = BIEN.ID_BIEN
WHERE date_mutation<='31/03/2020'))
                
SELECT (((ventes_2nd-ventes_1er)/ventes_1er)*100) as taux_evolution
FROM evolution

但是我有一个错误...

DO $$
DECLARE ventes_1er INT;
DECLARE ventes_2nd INT;
BEGIN 
ventes_1er:=(
SELECT COUNT(DISTINCT nature_mutation)
                FROM BIEN
                JOIN MUTATION ON MUTATION.ID_BIEN = BIEN.ID_BIEN
                WHERE date_mutation>'31/03/2020');
                
ventes_2nd :=(
SELECT COUNT(DISTINCT nature_mutation)
FROM BIEN
JOIN MUTATION ON MUTATION.ID_BIEN = BIEN.ID_BIEN
WHERE date_mutation<='31/03/2020');
                
SELECT ((ventes_2nd-ventes_1er)/(ventes_1er))*100 as taux_evolution
FROM BIEN
JOIN MUTATION ON MUTATION.ID_BIEN = BIEN.ID_BIEN
END $$

WITH evolution(ventes_1er,ventes_2nd) AS (
    VALUES((SELECT COUNT(DISTINCT nature_mutation)
                FROM BIEN
                JOIN MUTATION ON MUTATION.ID_BIEN = BIEN.ID_BIEN
                WHERE date_mutation>'31/03/2020'),(
SELECT COUNT(DISTINCT nature_mutation)
FROM BIEN
JOIN MUTATION ON MUTATION.ID_BIEN = BIEN.ID_BIEN
WHERE date_mutation<='31/03/2020'))
                
SELECT (((ventes_2nd-ventes_1er)/ventes_1er)*100) as taux_evolution
FROM BIEN
JOIN MUTATION ON MUTATION.ID_BIEN = BIEN.ID_BIEN
postgresql function subquery
© www.soinside.com 2019 - 2024. All rights reserved.