在这里,我想得到类似 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/