2013-09-30 30 views
0

這裏查詢的目標被簡化了,但它代表了一個複雜的問題,我想從子查詢中選擇所有用戶字段並計算SUM。所以,這只是一個例子。如何從sql中的所有列創建別名?

我正在做一個子查詢,因爲SUM重複行的問題。推薦與此回答一起使用:https://stackoverflow.com/a/7351991/255932

但問題是,子查詢也從表中評分中選擇列「評級」,我不能選擇所有用戶字段,除非在父級選擇中描述所有用戶列。

SELECT id, name, x, y, z ..., SUM(rating) 

FROM 
    (SELECT users.*, ratings.rating 
    FROM users 
    INNER JOIN ratings ON 
    users.id = ratings.user_id 
    ) 

GROUP BY users.id 

我想知道是否有一個簡單的(users.*)更換(id, name, x, y, z, ...)的方式。

回答

1

有點,但不是真的。有一個解決方法,但你必須以不同的方式處理你的子查詢。

SELECT (c.users).*, SUM(c.rating) 

FROM 
    (SELECT users, ratings.rating 
    FROM users 
    INNER JOIN ratings ON 
    users.id = ratings.user_id 
    ) c 

GROUP BY c.users; 
2

實際上,有兩種非常簡單的方法。

如果users.id主鍵

SELECT u.*, sum(r.rating) AS total 
FROM users u 
JOIN ratings r ON r.user_id = u.id 
GROUP BY u.id; 

您需要的Postgres 9.1或更高版本,這個工作。在這種密切reated查看回答詳情:
PostgreSQL - GROUP BY clause

如果users.id至少獨特

SELECT u.*, r.total 
FROM users u 
JOIN (
    SELECT user_id, sum(rating) AS total 
    FROM ratings 
    GROUP BY 1 
    ) r ON r.user_id = u.id; 

作品與我所知道的任何版本。當檢索整個表格或其大部分時,通常先組合並且稍後加入通常更快。