Оставить объединенный вопрос, используя пункт с суммой - PullRequest
0 голосов
/ 06 мая 2019

У меня есть две таблицы, products(id, name) и products_cost(id, sid, cost).

Я пытаюсь получить список продуктов, общая стоимость которых составляет менее 1000, включая продукты, которые не имеют стоимости.

Я пробовал это:

SELECT a.name, SUM(b.cost) AS price
FROM products a
LEFT JOIN products_cost b
ON a.id = b.sid
GROUP BY a.name
HAVING SUM(b.cost)<1000;

Приведенный выше SQL дает только список названий продуктов, который включает стоимость, и я хочу, чтобы в выходной список также входило название продукта, который также не включает стоимость.

Ответы [ 3 ]

2 голосов
/ 06 мая 2019

Я думаю, вам нужно проверить значения null в предложении having:

SELECT p.name, SUM(pc.cost) AS price
FROM products p LEFT JOIN
     products_cost pc
     ON p.id = b.sid
GROUP BY p.name
HAVING SUM(pc.cost) < 1000 OR SUM(pc.cost) IS NULL;

Обратите внимание, что я также исправил логику (salary не имеет смысла в SUM()).И я ввел значимые псевдонимы таблиц - сокращения для имен таблиц.

0 голосов
/ 06 мая 2019

Вы также можете добавить выражение IFNULL в ваше HAVING предложение

SELECT a.name, SUM(b.cost) AS price
FROM products a
LEFT JOIN products_cost b
ON a.id = b.sid
GROUP BY a.name
HAVING SUM(IFNULL,b.cost,0)<1000;
0 голосов
/ 06 мая 2019

используйте подзапрос и присоединяйтесь

   select p.*,a.s as cost from product p left join (
     select pid,sum(cost) as s
     from products_cost
    group by pid
    having s<1000 ) a on p.id=a.pid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...