Справка по запросам MySQL о соединениях и подсчете большинства случаев - PullRequest
0 голосов
/ 04 августа 2011

У меня есть две таблицы: client_table и order_table

Записи в client_table уникальны с id в качестве первичного ключа В таблице order_id order_id является первичным ключом, а также полем client_id. Client_id является первичным ключом client_table. В таблице order_table может быть несколько записей, содержащих один и тот же client_id. Так что это отношения один ко многим.

Я пытаюсь найти запрос, который выдает наиболее часто встречающийся 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 голосов
/ 04 августа 2011
SELECT b.client_id, count(*) AS Clients
FROM order_table AS b 
GROUP BY b.client_id 
ORDER BY Clients DESC

Нет необходимости в объединении, если вы хотите только идентификатор клиента, как вы сказали. Также, если вы хотите присоединиться, как в вашем примере запроса, вам нужно указать столбец с предложением ON.

... inner join order_table as b on a.id=b.client_id ...
0 голосов
/ 04 августа 2011

Да, вам совсем не нужен клиентский стол:

select
    client_id,
    count(order_id) order_count
from
    order_table
group by
    client_id
order by
    count(order_id) DESC
0 голосов
/ 04 августа 2011

вы можете попробовать:

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

Используйте DESC в ORDER BY, чтобы получить большинство случаев. Прямо сейчас вы получаете только самые низкие значения и попробуйте изменить ВНУТРЕННЕЕ СОЕДИНЕНИЕ на ЛЕВОЕ СОЕДИНЕНИЕ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...