将变量添加到连接表

时间:2014-02-13 00:03:30

标签: sql postgresql

我正在努力弄清楚如何将一个便利数据列添加到连接表以用于评估。 对不起,如果术语不正确,我有点像SQL新手。

对于此查询结构:

SELECT t1.id 
    FROM 
        table1 t1 
    INNER JOIN 
        table2 t2 ON t1.c2 = t2.c1 
    WHERE 
        t1.c5=5;

...我想在连接表中添加一个列,该列是使用一些t1列的函数计算的。例如,名为sum的变量中t1.xt1.yt1.z的{​​{1}}可以在score子句中引用。

背后的原因是它会被多次引用,并会降低冗长度并提高可读性。

我认为它看起来像:

WHERE

使用PostgreSQL 9.3

2 个答案:

答案 0 :(得分:1)

一个好的选择是使用having子句。

Select t1.id, SUM(t1.x + t1.y + t1.z)
FROM table1 t1 inner join table2 t2 on t1.c2 = t2.c1
WHERE t1.c5 = 5
GROUP BY t1.id
Having SUM(t1.x + t1.y + t1.z) = ...

或者,您可以在from子句中执行子查询。下面的代码对结构做了一些假设。

SELECT t1.id 
    FROM 
        (Select SUM(t1.x + t1.y + t1.z) as score, t1.c5, t1.c2, t1.id
         FROM table1 t1
         GROUP BY t1.id
        ) t1
    INNER JOIN table2 t2 on t1.c2 = t2.c1

    WHERE 
        t1.c5=5
        And t1.score = ...

答案 1 :(得分:1)

如果从score列计算t1,则在t1上使用子查询:

SELECT t1.id 
FROM (select t1.*, function(t1.x, t1.y, t1.z) as score
      from table1 t1 
     ) t1 INNER JOIN 
     table2 t2
     ON t1.c2 = t2.c1 
WHERE t1.c5 = 5 AND
      t1.score . . .