У меня есть запрос SQL с предложением groupby запрос выглядит так:
SELECT
products.product_name AS product_name,
contracts_balance.contract_prod AS contract_prod,
SUM( contracts.opt_one_firm + contracts.opt_two_firm + contracts.opt_three_firm +contracts.opt_four_firm +contracts.opt_five_firm +contracts.opt_six_firm)
AS total_open_balance
FROM
(
(
contracts_balance
LEFT JOIN products ON
(
(
contracts_balance.product_id_fk = products.product_id
)
)
)
LEFT JOIN supplier ON
(
(
products.supplier_id_fk = supplier.supplier_id
)
)
LEFT JOIN contracts ON
(
(
contracts_balance.contract_id_fk = contracts.contract_id
)
)
)
GROUP BY
products.product_name , products.pack_size
Вывод выглядит следующим образом:
В группе по запросу я хочу, чтобы запрос группировался по именам, игнорируя текст внутри скобок () Итак, он должен возвращать только 8 строк.
Спасибо
Вы можете использовать substring_index()
:
SELECT SUBSTRING_INDEX(p.product_name, ' (', 1) AS product_name,
cb.contract_prod AS contract_prod,
SUM( c.opt_one_firm + c.opt_two_firm + c.opt_three_firm + c.opt_four_firm + c.opt_five_firm + contracts.opt_six_firm) AS total_open_balance
FROM contracts_balance cb LEFT JOIN
products p
ON cb.product_id_fk = p.product_id LEFT JOIN
supplier s
ON p.supplier_id_fk = s.supplier_id LEFT JOIN
contracts c
ON cb.contract_id_fk = c.contract_id
GROUP BY SUBSTRING_INDEX(p.product_name, ' (', 1), cb.contract_prod;
Примечания:
SELECT
должны соответствовать ключам GROUP BY
. Я не понимаю, почему cb.contract_prod
в SELECT
, а не в GROUP BY
и почему p.pack_size
в GROUP BY
, а не в SELECT
.Также неправильно использовать LEFT JOIN
s в запросе и агрегировать по столбцу, которого нет в первой таблице, потому что он будет иметь NULL
значения в несовпадающих строках. Я подозреваю, что вы хотите products
в качестве первой ссылки на таблицу в FROM
.