Как получить порядок и сумму между тремя таблицами на MySQL? - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь отсортировать таблицу 1, используя сортировку в таблице 2, и суммировать значение для каждого «номера заказа» в таблице 1 и группировать по «номеру заказа», а после этого выводить имя клиента из таблицы 3, а затем результатдолжно быть так:

sort    ordernumber  sumvalue   name        location    
01          5555        120         Client 2    location 2
01          5498        50          Client 2    location 2
02          2324        50          Client 1    location1
02          4356        30          Client 1    location1

таблицы:

table 1 orders
===============
id      ordernumber code_client value
1           2324        01       20 
1           2324        01       30 
1           4356        01       30 
1           5555        02       40 
1           5555        02       40 
1           5498        02       50 
1           5555        02       40 

table 2 sort
============
sort    code_client
1           02
2           01

table 3 client
===============
code_client     name     location
01              Client 1  location1
02              Client 2  location2

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

SELECT orders.ordernumber, 
SUM(orders.value) AS totalordersvalue, 
orders.code_client,
sort.code_client,sort.sort,
client.code_client,client.name, client.location,
FROM orders 
LEFT JOIN client 
ON client.code_client = orders.code_client 
LEFT JOIN sort 
ON sort.code_client = orders.code_client 

WHERE orders.id = 1 
GROUP BY orders.ordernumber 
ORDER BY sort.sort

есть ли способ получить правильный заказ и правильную сумму для каждого заказа в качестве конечного результата?спасибо

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Если последовательность получения результата для вас не имеет значения, вы можете использовать следующий запрос

SELECT
  DISTINCT o.ordernumber,
  s.sort,
  (SELECT sum(os.value) AS sum_value FROM orders AS os WHERE o.ordernumber = 
os.ordernumber GROUP BY os.ordernumber) AS sum_value,
  c.name,
  c.location
FROM
  sort AS s,
  orders AS o,
  client AS c
  WHERE c.code_client = o.code_client AND o.code_client=s.code_client
ORDER BY s.sort;

Вывод:

ordernumber  sort    sumvalue   name        location    
5555         01      120        Client 2    location 2
5498         01      50         Client 2    location 2
2324         02      50         Client 1    location1
4356         02      30         Client 1    location1    
0 голосов
/ 20 февраля 2019

Вы можете попробовать ниже -

select sort, ordernumber ,totalordersvalue as sumvalue,name,location from 
(
SELECT orders.ordernumber, SUM(orders.value) AS totalordersvalue, 
orders.code_client
FROM orders WHERE orders.id = 1 group by orders.ordernumber,orders.code_client
)A inner join client ON client.code_client = A.code_client
inner join sort ON sort.code_client = A.code_client 
ORDER BY sort.sort
...