У меня есть таблица, которая показывает все продукты, поле price_fact, вычисляет среднее значение при выставлении счета и обновляет поле price_fact при вставке, а поле price_alb такое же, но с накладной.
Таким образом, когда в накладной (price_fact) нет накладной (price_alb), а когда она является накладной, накладной нет.
+---------------+------------+-------+-------------+-----------+
| name | id_product | price | price_fact| price_alb|
+---------------+------------+-------+-------------+-----------+
| phone | 1 | 300 | NULL | 275|
| mouse | 2 | 100 | 100 | NULL|
| phone | 1 | 250 | NULL | 275|
| mouse | 2 | 100 | NULL | 100|
| phone | 1 | 300 | 300 | NULL|
+---------------+------------+------+--------------+-----------+
И я хочу подсчитать все продукты в одной строке, общее количество продуктов, и окончательный результат покажет столбцы price_fact и price_alb этого продукта для тех, у кого были записи, которые не равны нулю.
+---------------+------------+-------+-------------+-----------+------+
| name | id_product | price | price_fact| price_alb| units|
+---------------+------------+-------+-------------+-----------+------+
| phone | 1 | 300 | 300 | 275| 3|
| mouse | 2 | 100 | 100 | 100| 2|
+---------------+------------+------+--------------+-----------+------+
Решено (я поставил MAX (price_fact), MAX (price_alb) в select).
У меня есть решение, только положите MAX (price_alb), MAX (price_fact).
Но мне любопытно, как можно получить price = 50 вместо 100?
Я сожалею, что неправильно рассчитал, когда писал. Это 100.






Вы можете попробовать использовать агрегатную функцию.
SELECT name,
id_product,
MAX(price) price,
MAX(price_fact) price_fact,
MAX(price_alb) price_alb,
COUNT(*) units
FROM T
GROUP BY name,id_product
Почему mouse
price = 50в вашем ожидаемом результате?