For example, I want collection list in order "**sku2,sku1**", but it list as "sku1,sku2", because the id of sku1 is smaller. How to achieve it? Example codes is below: $skus = 'sku2,sku1'; $collection->addAttributeToSelect('*') ->addAttributeToFilter( 'sku', array('in' => $skus) ); Magento 1.x has a way here https://magento.stackexchange.com/questions/10031/how-to-specify-custom-sort-order-for-product-collection/10034#10034, but it doesn't work on Magento 2: $collection->getSelect()->order(new Zend_Db_Expr("FIELD(e.sku, $skus)")); Fatal error: Uncaught Error: Class '.../Zend_Db_Expr' not found in ... ### Additional problem (when sku has a dash in it) Thanks for the answer, the Zend_Db_Expr is working now by add "/" before "Zend_Db_Expr": `$collection->getSelect()->order(new /Zend_Db_Expr("FIELD(e.sku, $skus)"));` But when sku has a dash in it, it will result a new question https://magento.stackexchange.com/questions/191568/product-collection-sort-order-by-skus-fix-the-error-when-sku-has-a-dash-in-it , hope someone could answer it.