2013-06-06 3 views
1

У меня есть таблица с именем td_cell_allocation, который имеет следующие данные:Как разместить заказ и группу по запросу mysql?

td_cell_allocation 

|-------------|-----------|------------------------------------|---------------| 
| first_name | last_name | user_email  | cell_image  | continent  | 
|--------------------------------------------------------------|---------------- 
| saswat  | roy  | [email protected] | a.jpg   | america  | 
-------------------------------------------------------------------------------- 
| shuvra  | pan  | [email protected] | b.jpg   | europe  | 
-------------------------------------------------------------------------------- 


td_cell_click 

|-------------|-----------------|------------------| 
| click_id | user_mail  | date_of_click | 
|--------------------------------------------------| 
|  1  | [email protected] | 2013-06-2  | 
---------------------------------------------------- 
|  2  | [email protected]  | 2013-06-2  | 
---------------------------------------------------- 
|  3  | [email protected]  | 2013-06-3  | 
---------------------------------------------------- 
|  4  | [email protected] | 2013-06-4  | 
---------------------------------------------------- 
|  5  | [email protected]  | 2013-06-5  | 
---------------------------------------------------- 
|  6  | [email protected] | 2013-06-5  | 
---------------------------------------------------- 
|  7  | [email protected] | 2013-06-5  | 
---------------------------------------------------- 
|  8  | [email protected] | 2013-06-8  | 
---------------------------------------------------- 
|  9  | [email protected]  | 2013-06-8  | 
---------------------------------------------------- 

теперь я хочу, чтобы отсортировать пользователи, имеющие наибольшее количество кликов на июнь месяц, сгруппированных по континентам

поэтому я написал запрос, как это:

SELECT first_name, last_name, count(click_id) AS tot_click, td_cell_allocation.continent 
         FROM td_cell_allocation, td_cell_click 
         WHERE td_cell_allocation.user_email = td_cell_click.user_mail 
         AND date_of_click LIKE '%-06-%' 
         GROUP BY td_cell_allocation.continent 
         ORDER BY tot_click DESC 

Это возвращает меня это:

shuvra   pan   2  europe 
shuvra   pan   2  europe 
saswat   roy   3  america 

затем я изменил мой запрос

SELECT * 
FROM (

SELECT first_name, count(click_id) AS tot_click, td_cell_allocation.continent 
FROM td_cell_allocation, td_cell_click 
WHERE td_cell_allocation.user_email = td_cell_click.user_mail 
ORDER BY tot_click, timestamp DESC 
) AS inv 
GROUP BY inv.continent 

вернулся

saswat 7 america 

Пожалуйста, может кто-нибудь помочь мне в этом деле

Я хочу, чтобы мой результат будет так:

saswat   roy   5  america 
    shuvra   pan   4  europe 
+0

Хотя есть некоторые возможности для улучшения ваш первый запрос работает просто отлично http://sqlfiddle.com/#!2/64429/5 – peterm

ответ

1

Причины вы видите странные результаты, что вы не называя все необобщенные столбцами в группе. Mysql (только) имеет некоторые нестандартные правила для группировки.

Первый шаг добавить другие столбцы в группе:

SELECT first_name, last_name, count(click_id) AS tot_click, td_cell_allocation.continent 
FROM td_cell_allocation, td_cell_click 
WHERE td_cell_allocation.user_email = td_cell_click.user_mail 
AND date_of_click LIKE '%-06-%' 
GROUP BY first_name, last_name, td_cell_allocation.continent 
ORDER BY tot_click DESC 

Следующая утонченность, чтобы изменить ваш запрос надлежащим присоединиться:

SELECT first_name, last_name, count(click_id) AS tot_click, td_cell_allocation.continent 
FROM td_cell_allocation 
JOIN td_cell_click ON td_cell_allocation.user_email = td_cell_click.user_mail 
WHERE date_of_click LIKE '%-06-%' 
GROUP BY first_name, last_name, td_cell_allocation.continent 
ORDER BY tot_click DESC 
0

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

select t1.first_name,t1.last_name,count(t2.date_of_click) as cnt ,t1.continent 
from Table1 t1 
Inner join Table2 t2 
ON t1.user_email=t2.user_mail AND date_of_click LIKE '%-06-%' 
Group BY continent 
ORDER BY cnt DESC 

SQL Fiddle Demo

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