Специальное заявление о выделении (sqlite) - PullRequest
0 голосов
/ 13 декабря 2010
  1. Таблица: «пользователь»

- ИД пользователя - Имя -

(каждый идентификатор пользователя уникален)

  1. Таблица: «тратить деньги»

- Идентификатор пользователя - денежные расходы -

(в идентификаторе пользователя может быть несколько записей с разными «расходами денег»)

Теперь мне нужна общая сумма денег, потраченных пользователем.

В заключение мне нужно следующее представление:


- имя - сумма (потраченные деньги) -

Какое утверждение может дать мне этот результат?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2010

Поскольку у вас могут быть пользователи без записи в таблице money_spend, вам необходимо внешнее объединение:

select n.name, sum(ms.money)
from user n
left outer join money_spend ms on (n.userid = ms.userid)
group by n.name

Изменить: Чтобы убедиться, что все это работает, я только что попробовал это

create table user(userid, name);
insert into user values (1, 'user1');
insert into user values (2, 'user2');
insert into user values (3, 'user3');
create table moneyspend(userid, amount);
insert into moneyspend values (1,10);
insert into moneyspend values (1,20);
insert into moneyspend values (2,100);
select * from user;
select * from moneyspend;
select u.name, sum(m.amount)
from user u
left outer join moneyspend m on (u.userid = m.userid)
group by u.name;
drop table user;
drop table moneyspend;

Вывод на консоль следующий (testSQLite - моя тестовая БД, testsql.sql - выше)

hols-Mac:div4 hol$ sqlite3 -init testsql.sql testSQLite
-- Loading resources from testsql.sql
1|user1
2|user2
3|user3
1|10
1|20
2|100
user1|30
user2|100
user3|
SQLite version 3.6.12
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> 
0 голосов
/ 13 декабря 2010

Вы можете использовать агрегатную функцию и группу следующим образом:

select u.name, sum(ms.money) 
from user u, money_spend ms
where u.userid = ms.userid 
group by u.userid

Обратите внимание, что здесь предполагается, что у каждого пользователя есть хотя бы 1 строка в таблице money_spend: http://www.sqlite.org/lang_aggfunc.html

Благодаря тому, что агрегатные функции работают, вы можете настроить таблицу money_spend со значением 0 для каждого пользователя, чтобы не сталкиваться с какими-либо проблемами:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...