2015-08-27 2 views
0

Привет им ищет, чтобы получить максимальное количество пользователей, которые используют одно приложение использовать это приложениеКоличество MySQL того отчетливый

╔════════════════════════════════════════════════════════════════════════╗ 
║ username clientname  date   time   publishedapp ║ 
╠════════════════════════════════════════════════════════════════════════╣ 
║ akirk hplaptop1 30/07/2015 8:42:30.04 PB Desktop service ║ 
║  john  dellPC1 27/07/2015 9:41:30.04 [email protected]  ║ 
║  john  dellPC1 27/07/2015 9:41:30.04 Word 2013   ║ 
║  karl delllaptop2 27/07/2015 9:40:21.00 Chrome    ║ 
║  karl delllaptop2 27/07/2015 9:40:21.00 Desktop with acrobat ║ 
║  jdoe  HPPC1 27/07/2015 9:40:15.00 Powerplan   ║ 
║  mrt  P2000 31/02/2015 10:03.20  PB Desktop service ║ 
╚════════════════════════════════════════════════════════════════════════╝ 

Я бы сматривая что-то вроде этого:

PB DEsktop service: 2 
Powerplan: 1 

мне удалось получить

PB DEsktop service: 2 
[email protected]: 1 
Desktop with acrobat: 1 
Chrome: 1 
Word 2013: 1 
Powerplan: 1 

с этим запросом:

SELECT publishedapp, COUNT(DISTINCT username) as cnt 
FROM tbl_name 
GROUP BY publishedapp 
ORDER BY cnt DESC 
+1

так, что ваше дие ?? –

+0

Сколько пользователей, использующих одно приложение, используют это приложение? посмотрите, что im specting ... Я не знаю, как запросить это ... – maco1717

ответ

1

Вот один метод, который не требует объединения:

select publishedapp, count(*) as NumberOfUsers 
from (select username, min(publishedapp) as publishedapp 
     from table t 
     group by username 
     having count(*) = 1 
    ) u 
group by publishedapp 
order by count(*) desc; 

Если пользователь имеет только одно приложение, то минимум будет, что приложение.

Если у пользователя может быть приложение несколько раз (и вы все еще хотите его), измените count(*) в подзапросе на count(distinct publishedapp).

+0

Где я могу узнать, сколько пользователей использует это приложение? – maco1717

+0

и подзапросом вы имеете в виду бит HAVING? – maco1717

+0

@ maco1717. , , Запрос возвращает количество пользователей, использующих приложение. Подзапрос находится в предложении 'FROM'. –

3

Попробуйте

SELECT publishedapp, COUNT(*) as cnt 
FROM 
(
select username from tbl_name 
group by username 
having count(*)=1 
) as t1 inner join tbl_name as t2 
on t1.username=t2.username 
GROUP BY publishedapp 
ORDER BY cnt DESC 
+0

это возвращает интересные значения, но не соответствует моим данным ...: S id хотел бы знать, есть ли способ вернуть usernama чтобы понять, что именно получается отсюда, спасибо. – maco1717

+0

Вы можете добавить имя пользователя в первом выбрать, а также в последней группе по статье – Madhivanan

+0

не понимают, вот что я пытался 'ВЫБРАТЬ publishedapp, имя пользователя, COUNT (*) в качестве НКТА FROM ( выберите имя пользователя из tbl_name группа по имени пользователя имея COUNT (*) <= 1 ) как t1 INNER JOIN tbl_name как t2 на t1.username = t2.username GROUP BY publishedapp, имя пользователя ORDER BY CNT DESC' – maco1717

0

Вы можете добиться этого с EXISTS:

SELECT t.publishedapp, COUNT (DISTINCT t.username) 
FROM tbl_name t 
    WHERE NOT EXISTS(
       SELECT * 
       FROM tbl_name 
       WHERE publishedapp = t.publishedapp and 
        username = t.username AND 
        datetime != t.datetime) -- or use ID if you have it 
GROUP BY publishedapp 
ORDER BY cnt DESC 
+0

это не работает для меня, что такое datetime? я предполагаю, что оба поля сцеплены ... не нужно ли их конкатенировать? – maco1717

+0

Да, это комбинация двух полей, в идеале у вас будет поле ID в вашей таблице, которое вы можете использовать для сравнения. – Bulat

Смежные вопросы