Как получить количество данных с помощью MySQL

php mysql

49 просмотра

3 ответа

У меня есть две таблицы данных и пользователя. Мне нужно получить количество данных-> значение и показать только наибольшее количество и имя пользователя->.

например, user_id 2: количество равно 3

Я попробовал какой-то запрос, но это неправильно.

SELECT data.value, user.name 
FROM data 
INNER JOIN user 
ON data.value = user.id 
WHERE data.field = 'user_id'

ДАННЫЕ

id  order_id   field     value (id of user table)
1      1      user_id     1  
2      2      user_id     3
3      3      user_id     2
4      4      user_id     2
5      5      user_id     1
6      6      user_id     2

USER

id    name  
 1    foo
 2    joo
 3    peter 
Автор: Sarath TS Источник Размещён: 08.11.2019 10:56

Ответы (3)


0 плюса

Решение
  • Данные зависят от записей пользователя, и у каждого пользователя есть несколько связанных строк в таблице данных, нам нужно использовать GROUP BY .
  • Нам нужно найти пользователя с максимальным количеством. Для этого столбец count упорядочен в порядке убывания, используя ORDER BY count DESC и самую первую строку с макс. значение извлекается с помощью LIMIT 0, 1 .

Попробуй это:

SELECT data.value, user.name, data.field, COUNT(*) as count
FROM data 
INNER JOIN user 
ON data.value = user.id 
GROUP BY user.name
HAVING data.field = 'user_id'
ORDER BY count DESC
LIMIT 0,1

Выход:

value  |  name  |  field  |  count
  2    |  john  | user_id |    3
Автор: Object Manipulator Размещён: 20.08.2016 05:56

0 плюса

Использовать группу по

select count(value) from tablename group by value;

это даст вам счет 3 согласно вашей таблице

Автор: Sumit Badaya Размещён: 20.08.2016 06:22

-1 плюса

Согласно вашему примеру, вы можете сделать что-то вроде этого:

SELECT data.value AS user_id, 
data.field, 
COUNT( * ) AS count 
FROM data 
INNER JOIN user 
ON data.value = user.id 
GROUP BY user.name 
HAVING data.field = 'user_id' 
ORDER BY count DESC 
LIMIT 0 , 1
Автор: Manish Silawat Размещён: 20.08.2016 06:07
Вопросы из категории :
32x32