mysql - 一组行的 ORDER BY 条件

标签 mysql sql-order-by codeigniter-3

在这里,我想得到类似 number 行的结果,这意味着一个接一个,每行将有不同的数据计数,计数较高的行应该排在第一位,这是我的代码

public function get_all_mostly_entered_numbers($limit,$offset)
{

    $query=$this->db->query("SELECT *, SUM(quantity) AS MOST_FREQUENT
         FROM datas
         WHERE date_status=1
         GROUP BY number,type
         ORDER BY SUM(quantity) DESC LIMIT 200");

    return $query->result();
}

结果是这样的

type        number       count
sup          555         280
sup          000         245
sup          777         235
sup          888         235
bo           000         40
bo           777         30
bo           888         25
bo           555         10

我希望我的结果是这样的

type        number       count
sup          555         280
bo           555         10
sup          000         245
bo           000         40
sup          777         235
bo           777         30
sup          888         235
bo           888         25

最佳答案

查看提供的示例

您可以使用结果与最大结果和基于顺序的连接(在示例中有一个 max_val 列以便更好地理解结果)

 select T.number, max(T.MOST_FREQUENT) max_val, W.MOST_FREQUENT, W.Type
  from (

  SELECT *, SUM(quantity) AS MOST_FREQUENT
       FROM datas
       WHERE date_status=1
       GROUP BY number,type
       ORDER BY SUM(quantity) DESC LIMIT 200 ) T 
  INNER JOIN (
  SELECT *, SUM(quantity) AS MOST_FREQUENT
           FROM datas
           WHERE date_status=1
           GROUP BY number,type
           ORDER BY SUM(quantity) DESC LIMIT 200
  ) W ON T.number = W.number 
  group by T.number, , W.MOST_FREQUENT, W.Type
  ORDER BY  max(T.MOST_FREQUENT)  DESC
           , (max(T.MOST_FREQUENT)=W.MOST_FREQUENT) DESC
           ,  W.MOST_FREQUENT
           , W.Type

您不能显示 max_val 只需从结果(有序)中仅选择您需要的列

并且为了避免使用相同的 max_row 的错误序列,您可以尝试

select T.number, max(T.MOST_FREQUENT) max_val, W.MOST_FREQUENT, W.Type
  from (

  SELECT *, SUM(quantity) AS MOST_FREQUENT
       FROM datas
       WHERE date_status=1
       GROUP BY number,type
       ORDER BY SUM(quantity) DESC LIMIT 200 ) T 
  INNER JOIN (
  SELECT *, SUM(quantity) AS MOST_FREQUENT
           FROM datas
           WHERE date_status=1
           GROUP BY number,type
           ORDER BY SUM(quantity) DESC LIMIT 200
  ) W ON T.number = W.number 
  group by T.number, , W.MOST_FREQUENT, W.Type
  ORDER BY  concat(lpad(max(T.MOST_FREQUENT), 10, '0'), T.number)  DESC
           , (concat(max(T.MOST_FREQUENT, T.number))= concat(W.MOST_FREQUENT, T.number)) DESC
           ,  W.MOST_FREQUENT
           , W.Type

关于mysql - 一组行的 ORDER BY 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49067895/

相关文章:

codeigniter 3.0 类似查询添加 ESCAPE '!' 类似

php - 我想运行查询来获取 catagory_name 的层次结构

mysql - 在 MySQL 中按 RAND() 排序

ruby-on-rails-3 - Rails 3 按孙子计数的订单记录

sql - 在不使用 ORDER BY 子句的情况下以相同的顺序获取记录

javascript - 如何/在哪里可以在包含用户输入的所有响应中添加 “X-Content-Type-Options: nosniff”

php - Codeigniter 分页显示太多链接

php - 每次部署后 Amazon EC2 Linux PHP 速度都会变慢

php - 触发多个 Action 和循环

mysql - 如何使用 Mysql SUM 和 JOIN