一组行的 ORDER BY 条件

ORDER BY condition for a group of rows

这里我想得到类似 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 结果(已排序)中的 select 您需要的列

并且为了避免使用相同 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
 $query=$this->db->query("SELECT *,T.number, max(T.MOST_FREQUENT), 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");

 return $query->result();

我像这样更改了代码得到这样的结果

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

如果两个号码有相同的计数,则两个号码一个接一个地出现,而不是选择相同的号码