Соединение таблиц 1 ко многим SQL - PullRequest
0 голосов
/ 19 мая 2018

У меня есть две таблицы, к которым я хочу присоединиться.Я думаю, что я должен сделать левое присоединение.в таблице B есть дублированный идентификатор, но я хочу сохранить детали в B и создать отдельные строки, если детали в B не совпадают.

Таблица A:

+----+-------------------------------+------------+
| ID | How Many Times He Has Shopped | TotalSpend |
+----+-------------------------------+------------+
|  1 |                            12 | $100       |
|  2 |                            10 | $152       |
|  3 |                             5 | $30        |
|  4 |                            12 | $300       |
+----+-------------------------------+------------+

Таблица B:

+------+----------+--------------+
| ID   | Income   | TimeMeasured |
| 1    | 20,000   | 2011         |
| 2    | 20,000   | 2011         |
| 3    | 22,000   | 2011         |
| 4    | 20,000   | 2011         |
| 1    | 30,000   | 2012         |
| 2    | 33,000   | 2012         |
| 3    | 20,000   | 2012         |
| 4    | 40,000   | 2012         |
+------+----------+--------------+

и я хочу создать таблицу, которая выглядит следующим образом:

+--------------------------+-------------+------------------------------+----------+--------------+-----+
| HowManyTimesHeHasShopped |  TotalSpend |  HowManyPeopleFitinCategory  |  income  | TimeMeasured |     |
+--------------------------+-------------+------------------------------+----------+--------------+-----+
|                       12 | 400        |                            2 | 20,000  |         2011 |     |
|                       10 | 152        |                            1 | 20,000  |         2011 |     |
|                        5 | 30         |                            1 | 22,000  |         2011 |     |
|                       12 | 100        |                            1 | 30,000  |         2012 |     |
|                      10  | 152        |                            1 | 33,000   |         2012 |     |
|                       5  | 30         |                            1 | 20,000   |         2012 |     |
|                      12  | 300        |                            1 | 40,000   |         2012 |     |
+--------------------------+-------------+------------------------------+----------+--------------+-----+

1 Ответ

0 голосов
/ 19 мая 2018

Кажется, просто вопрос группировки и некоторых агрегатных функций.

Пример SQL ниже был протестирован в MySql 5.6

Данные тестов установки:

create table TableA_Shoppingsprees (ID INT, HowManyTimesHeHasShopped INT, TotalSpend DECIMAL(15,3));
insert into TableA_Shoppingsprees (ID, HowManyTimesHeHasShopped, TotalSpend) values 
(1,12,100.0), (2,10,152.0), (3,5,30.0), (4,12,300.0);

create table TableB_Earnings (ID INT, Income DECIMAL(15,3), TimeMeasured DECIMAL(4,0));
insert into TableB_Earnings (ID, Income, TimeMeasured) values
(1, 20.0, 2011), (2, 20.0, 2011), (3, 22.0, 2011), (4, 20.0, 2011),
(1, 30.0, 2012), (2, 33.0, 2012), (3, 20.0, 2012), (4, 40.0, 2012);

Запрос:

select 
 HowManyTimesHeHasShopped,
 sum(TotalSpend) as TotalSpend,
 count(b.ID) as HowManyPeopleFitinCategory,
 Income,
 TimeMeasured
from TableB_Earnings b
join TableA_Shoppingsprees a on (a.ID = b.ID)
group by TimeMeasured, HowManyTimesHeHasShopped, Income 
order by TimeMeasured, min(a.ID);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...