Mysql SELECT语句按计数顺序排列

时间:2014-04-03 18:27:30

标签: php mysql

我不确定这是否可行

我有一张包含ordersuserid

的表格

我需要SELECT查询ORDER BY客户订单数量最少

示例:

userid1 has 10 orders
userid2 has 5 orders

然后SELECT应在顶部显示userid2

提前致谢

6 个答案:

答案 0 :(得分:5)

如果你有订单作为ordersCount我的意思是作为一个保持订单计数的字段

Select * FROM YourTable order by orders ASC

否则,如果您有每个订单的记录,那么

Select * FROM YourTable Group by UserID order by count(*) ASC;

像这样申请限额

Select * 
     FROM YourTable 
     Group by UserID 
     order by count(*) ASC 
     limit startIndex, fetchSize;

其中startIndex和fetchSize是int,用于定义限制

答案 1 :(得分:2)

您需要按userid进行分组,以便按用户计算订单。

SELECT userid, count(1) FROM orders GROUP BY userid ORDER BY count(1) asc

答案 2 :(得分:1)

您可以使用GROUP BY完成此操作并按COUNT()排序。

就是这样的。

SELECT userid, COUNT(*) qt
FROM orders
GROUP BY userid
ORDER BY qt

答案 3 :(得分:0)

您可以选择列的COUNT并为其命名,然后使用该名称进行排序。这是一个例子:

SELECT
    p.*,
    (SELECT COUNT(o.order_id) FROM orders AS o WHERE p.partron_id=p.patron_id) AS orderCount
FROM
    patrons AS p
WHERE
    ...
ORDER BY
    orderCount ASC

更新:刚刚意识到只有在单独的表中才有订单而不是顾客才有用。如果你只看一张桌子,请不要理会。

此查询要求您有两个表,一个patron表,其中包含名称等赞助信息,以及一个orders表,其patron_id列与{中的标识列相匹配{1}}表。

这样做的好处是您可以同时请求顾客信息,因此如果您打算使用该信息,则无需在PHP中运行两个查询。

答案 4 :(得分:0)

但是,如果每个订单都在自己的行中,则需要汇总它们:

SELECT * from MYTABLENAME GROUP BY userid ORDER BY COUNT(*)

答案 5 :(得分:0)

伯爵就是你要找的东西

SELECT count(theField) as theCount, *
FROM theTable
GROUP BY theField
ORDER BY theCount