MySQL查询帮助连接和计算大多数事件

时间:2011-08-04 06:43:02

标签: mysql join

我有两个表,client_table和order_table

client_table中的条目是唯一的,其中id为主键 在order_table中,order_id是主键,也是client_id字段。 client_id是client_table的主键。 order_table中可以有多个包含相同client_id的条目。所以这是一对多的关系。

我正在尝试提出一个在order_table中产生最多发生的client_id的查询

我尝试了以下查询。

SELECT a.id FROM `client_table` as a  inner join order_table as b GROUP BY a.id ORDER BY count(b.client_id)

所以我正在寻找拥有最多订单的client_id的结果。我想我只需要order_table而且不需要client_table吗?

3 个答案:

答案 0 :(得分:0)

你可以尝试:

SELECT a.id FROM `client_table` as a  left join order_table as b ON a.id = b.client_id GROUP BY a.id ORDER BY count(b.client_id) desc

在ORDER BY中使用DESC以获得大多数出现。现在你只得到最低的出现率,并尝试将INNER JOIN改为LEFT JOIN。

答案 1 :(得分:0)

SELECT b.client_id, count(*) AS Clients
FROM order_table AS b 
GROUP BY b.client_id 
ORDER BY Clients DESC

如果您只想要客户端ID,则无需加入,就像您说的那样。此外,如果要加入,例如在示例查询中,则需要指定具有ON子句的列。

... inner join order_table as b on a.id=b.client_id ...

答案 2 :(得分:0)

是的,您根本不需要客户端表:

select
    client_id,
    count(order_id) order_count
from
    order_table
group by
    client_id
order by
    count(order_id) DESC