一组行的 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
如果两个号码有相同的计数,则两个号码一个接一个地出现,而不是选择相同的号码
这里我想得到类似 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
如果两个号码有相同的计数,则两个号码一个接一个地出现,而不是选择相同的号码