SQL выбрать из таблицы, где ключ в массиве по столбцам - PullRequest
2 голосов
/ 01 июня 2011

с учетом таблицы счетов

# bills
id  | name    | amount  | user_id
1   | jumper  | 100     | 1
2   | gopper  | 200     | 1
3   | jumper  | 150     | 2
4   | blobber | 300     | 3

и таблица пользователей

# users
id  | name
1   | John Doe
2   | Mike Marley
3   | Bill Mickane

когда я выполняю запрос

select * from bills where user_id in (1,2) order by name, amount desc

Я получаю

# bills
id  | name    | amount  | user_id
2   | gopper  | 200     | 1
3   | jumper  | 150     | 2
1   | jumper  | 100     | 1

но я хочу (и все остальные столбцы)

# bills
name    | amount
gopper  | 200   
jumper  | 250   

как бы этого достичь?

Я испытываю желание использовать

select * from bills where user_id in (1,2) group by name order by name, amount desc

, но не может, так как group by также должен будет перечислить имена других столбцов и в итоге не объединить две строки по желанию.

p.s. Я использую postgresql

Ответы [ 4 ]

3 голосов
/ 01 июня 2011

Если вам просто нужны эти 2 поля, вы можете использовать Aggregate SUM ():

 SELECT 
          name, 
          SUM(amount) 
     FROM 
          bills 
     WHERE 
          user_id IN (1,2) 
     GROUP BY 
          name 
     ORDER BY 
          name, 
          amount

Однако предположим, что вы хотите больше, чем просто эти два поля ... вам помогут выложенные запросы.

SELECT
 m.id, m.name, t.userId, t.amount 
FROM Bills m
 INNER JOIN
 (
   SELECT
          user_id as userID,
          SUM(amount) as amount
   FROM
          bills
   GROUP BY user_id
 ) t
ON t.UserID = m.UserID
1 голос
/ 01 июня 2011
select name, sum(amount) as amount
from bills where user_id in (1,2) 
group by name 
order by name, amount desc
1 голос
/ 01 июня 2011
SELECT name, SUM(amount) as amount
FROM bills where user_id IN (1,2) 
GROUP BY name
ORDER BY name, amount DESC
1 голос
/ 01 июня 2011
SELECT 
    name, SUM(amount) 
FROM 
    bills 
WHERE 
    user_id IN (1,2) 
GROUP BY 
    name 
ORDER BY 
    name, amount DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...