Pegar os 30 maiores registros?

Em uma lista com mais ou menos uns 5 mil registros, como faço para verificar quem são os 30 maiores?

Se for de SQL que está falando pode fazer um select com OrderBy:

SELECT * FROM tabela ORDER BY DESC LIMIT 30
  • Qual é o seu banco de dados ou repositório de informação?
  • Qual é a coluna que vai dizer qual é o valor maior entre as outras linhas?
  • Seja mais especifico e cite todas as informações da sua duvida!

Neste caso, eu ja tenho a lista de valores dentro de uma variável.
Ex: ja tenho a lista dentro da minha variável quantidaeGeral.

quantidaeGeral += orderItem.getQuantity();

Qual variável? Qual código? Coloque o código? Ordernar o que? Como ordernar?

Estou fazendo um simples iterador pra contar a quantidade de itens que tenho no banco.

quantidaeGeral += orderItem.getQuantity();

O resultado final deste iterador é um lista com vários onjetos no que estão no banco e foram comprados tantas vezes.

Eu só gostaria de saber, como verificar essa variável quantidadeGeral, pra obter os 30 maiores valores.

|  Nome       | SKU          |  Quantidade Vendas    |
|  Camiseta   |30100         |    37                 |
|  calsa      |31821         |    26                 |
|  shorts     |10402         |     0                 |
|  etc        |24633         |   653                 |

Você não precisa fazer isso. A quantidade de itens que você tem no banco pode ser pega pelo ID, aquele número único que você tem.

Os maiores valores seriam do que? Venda? Quantidade? Esse “SKU”? De toda forma, você pode organizar isso na query e retornar só os maiores valores.

1 curtida

Estou fazendo uma consulta no Mongo, onde preciso retornar a quantidade do numero de vendas de um item.

Este item pode estar presente dentro de varias Ordens.

Sendo assim

//trago todas as ordes aprovadas menos as canceladas
Query queryOrders = new Query();

queryOrders.addCriteria(Criteria. *where* ("items").elemMatch(Criteria. *where* ("product.sku").is(product.getSku())));
queryOrders.addCriteria(Criteria. *where* ("status").ne(Order.OrderStatus. *CANCELED* ));
List<Order> list = mongoTemplate.find(queryOrders, Order.class);

Depois eu preciso entrar dentror dessa ordem, verifico os items dela e faço o contador.

for (Order o : list) {
if (o.getItems() != null){
OrderItem orderItem = o.getItems().stream().filter(i -> i.getProduct().getId().equals(product.getId())).findAny().orElse(null);
if (orderItem != null && orderItem.getQuantity() >= 0){
quantidaeGeral += orderItem.getQuantity();
}

Agora, com o resultado de todas as verificações, eu preciso saber quais as que mais obtiveram compras.

Faça isso direto no código SQL:
SELECT * FROM tabela ORDER BY quantidade_Vendas DESC LIMIT 30;

Dessa forma vc vai ordenar pela coluna quantidade de forma decrescente e só vai retornar 30 registros.