Выберите sql-запрос для группировки по вложенному json

Данные, которые я получаю из выбранного запроса, выглядят примерно так

[{
  id: 'CB2FD8B7-7E6D-4BF3-8E73-70D41FFBE456',
  products: '[{"product_id":"22061DA1-5D64-475A-B36A-140ECFE8D6B7"}]',
  falconpay_api_response: null,
  dhl_updated_by: null
}, ... ]

Я получаю orders, а затем анализирую атрибут products, извлекаю product_id и подсчитываю количество раз, когда product_id встречался в числе различных json-объектов. Это займет очень много времени, если количество строк для выборки исчисляется тысячами, а затем извлекаются идентификаторы и подсчитываются их вхождения. Есть ли эффективный способ использовать GROUP by и напрямую получать вхождения product_id для тысяч строк.

значение товаров должно быть массивом / объектом, а не строкой. т.е. [{id: 'CB2FD8B7-7E6D-4BF3-8E73-70D41FFBE456', products: [{"product_id": "22061DA1-5D64-475A-B36A-140ECFE8D6B7"}], falconpay_api_response: null, dhl_updated_by .]

Praloy Das 10.09.2018 09:49
1
1
687
2

Ответы 2

Вы можете использовать это!

var data = [{
  id: 'CB2FD8B7-7E6D-4BF3-8E73-70D41FFBE451',
  products: [{"product_id":"22061DA1-5D64-475A-B36A-140ECFE8D6B7"}],
  falconpay_api_response: null,
  dhl_updated_by: null
},{
  id: 'CB2FD8B7-7E6D-4BF3-8E73-70D41FFBE452',
  products: [{"product_id":"22061DA1-5D64-475A-B36A-140ECFE8D6B7"},{"product_id":"22061DA1-5D64-475A-B36A-140ECFE8D6K7"}],
  falconpay_api_response: null,
  dhl_updated_by: null
},{
  id: 'CB2FD8B7-7E6D-4BF3-8E73-70D41FFBE453',
  products: [{"product_id":"22061DA1-5D64-475A-B36A-140ECFE8D6K7"}],
  falconpay_api_response: null,
  dhl_updated_by: null
},{
  id: 'CB2FD8B7-7E6D-4BF3-8E73-70D41FFBE454',
  products: [{"product_id":"22061DA1-5D64-475A-B36A-140ECFE8D6B7"}],
  falconpay_api_response: null,
  dhl_updated_by: null
}];
var a =[];
data.forEach(function(order){
    order.products.forEach(function(product){
    if(a[product.product_id] == undefined){
        a[product.product_id] = [];
    }
    a[product.product_id].push(order);
  })
});
console.log(a);

Попробуйте выполнить следующий запрос (работает только с типом данных JSON): -

SELECT products->>'$.product_id' products, 
      count(products)
FROM events
GROUP BY products->>'$.product_id';

И следующая ссылка будет вам полезна: -

[http://www.mysqltutorial.org/mysql-json/]

OP указал SQL-Server, а не MySQL. Надеюсь, это поможет следующему человеку, который здесь споткнется ...

D-Klotz 11.06.2020 23:48

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