Показать и сгруппировать все записи с одинаковым идентификатором с двумя полями, которые не равны нулю

У меня есть таблица, которая показывает все продукты, поле 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).

Почему mouseprice = 50 в вашем ожидаемом результате?

D-Shih 13.11.2018 15:22

У меня есть решение, только положите MAX (price_alb), MAX (price_fact).

Sylar 13.11.2018 15:27

Но мне любопытно, как можно получить price = 50 вместо 100?

D-Shih 13.11.2018 15:29

Я сожалею, что неправильно рассчитал, когда писал. Это 100.

Sylar 13.11.2018 15:30
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
4
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать использовать агрегатную функцию.

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

Другие вопросы по теме