Как получить различное количество статусов по идентификатору продукта

0

Я получил результат от сложного запроса ниже

SELECT o_items.sku,
       o_items.name        AS 'title',
       o_items.qty_ordered AS 'quantity',       
       s_orders.base_amount_paid AS 'paid/unpaid'
  FROM sales_order_payment s_orders
 INNER JOIN (SELECT s.sku, s.name, s.qty_ordered, s.order_id
               FROM sales_order_item s             
              INNER JOIN (SELECT p.entity_id
                           FROM catalog_product_entity AS p                         
                          INNER JOIN catalog_product_entity_int AS a
                             ON p.row_id = a.row_id
                          WHERE VALUE >= 0
                            AND                               
                                a.attribute_id =
                                (SELECT attribute_id
                                   FROM eav_attribute                                 
                                  WHERE attribute_code = 'is_darkhorse')) as q
                 ON s.product_id = q.entity_id             
              WHERE s.created_at BETWEEN '2019-01-14' AND '2019-01-16') o_items
          ON
             s_orders.parent_id = o_items.order_id

Изображение 174551 это данные заказа, которые были оплачены или еще не оплачены. Сумма представляет собой оплаченный и Null представляет неоплаченный статус

Я пытаюсь получить результат ниже, но не смог, и мне нужна помощь. На самом деле этот результат показывает, каким образом количество товара было оплачено, а сколько еще не оплачено. Это будет результатом вышеупомянутых данных. Изображение 174551

Пожалуйста, покажите мне, как мне достичь этих результатов.

  • 1
    поделиться запросом в текстовом формате, а не изображения.
  • 0
    @MuhammadWaheed Я хочу получить результат из первой таблицы выше. так что не беспокойтесь о моем запросе и рассматривайте результат первой таблицы как таблицу.
Показать ещё 1 комментарий
Теги:
mysqli

2 ответа

1
Лучший ответ

Использовать этот. ... представлять существующий код.

select .... , sum(case  when s_orders.base_amount_paid  is not null 
                        then o_items.qty_ordered
                        else 0 
                  end) as paid, 
              sum(case  when s_orders.base_amount_paid  is null 
                        then o_items.qty_ordered 
                        else 0 
                  end) as unpaid
From .......
  • 0
    спасибо, но это даст сумму подсчета строк, а не количество сумм
  • 0
    ваш ответ был слишком близок, я должен был сделать небольшую настройку, я заменил «1» на o_items.qty_ordered. Теперь это сумма qty вместо количества строк ордеров. Пожалуйста, внесите это изменение в свой ответ, кстати, я принимаю ваш ответ. Спасибо большое.
Показать ещё 1 комментарий
0

Вы можете использовать функции if и ifnull вместе (при условии, что вы используете mysql в качестве СУБД)

и выражение GROUP BY

SELECT c.sku, c.name, 
       sum(if(ifnull(base_amount_paid,0)=0,0,1)) as paid,
            sum(if(ifnull(qty_ordered,0)=0,0,1)) as unpaid
  FROM catalog_prod_ent_derived c
 GROUP BY c.sku, c.name

где catalog_prod_ent_derived представляет весь ваш запрос как подзапрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню