У меня есть две таблицы A и B.
Моя цель состоит в том, чтобы перечислить все строки из A, а также добавить сумму «сумма» из B.
как это:
SELECT a.name,
SUM(b.amount) as amount
FROM a
LEFT JOIN b ON a.id = b.a_id
GROUP BY a.id
Нет проблем до этого, но мне также нужно проверить, соответствует ли 'shop_id' в таблице B значение, и если да, то я хочу, чтобы 'количество' этой отдельной строки, а не сумма всех сгруппированных строк. Надеюсь это понятно.
Table A
id name
----------------
1 john
2 doe
3 smith
Table B
a_id amount shop
-----------------------
1 4 1
1 3 2
2 2 2
2 7 3
3 3 3
3 1 2
Желаемый результат с 'shop' = 1:
name amount shop
---------------------
john 4 1 //no SUM, only the value of amount where shop=1
doe 9 0 //sum(7,2) because shop is not 1
smith 4 0 //sum(3,1)
Я думал об операторе if при выборе SUM (), похожем на этот, но приведенный ниже оператор возвращает не нужное значение сгруппированной строки
SELECT a.name,
( CASE
WHEN b.shop <> 1 THEN Sum(b.amount)
ELSE b.amount
end ) AS amount,
( CASE
WHEN b.shop <> 1 THEN 0
ELSE b.shop
end ) AS shop
FROM a
LEFT JOIN b
ON a.id = b.a_id
GROUP BY a.id
Есть идеи? Есть ли способ поставить это условие в группу, как: case shop<>1 THEN .... ELSE GROUP BY a.id
??