2016-02-12 4 views
3

У меня есть запрос, обобщающий активных клиентов по странамMYSQL QUERY // Проблема в COUNT

SELECT t1.Date,t2.country, sum(t1.countplayer) as PlayerCount 
FROM 
(SELECT Customers AS Player, 
    Date, 
    1 as countplayer 
    FROM Online_customer_activity_v2 
    ) t1 
JOIN `players` t2 
ON t1.`Player` = t2.`username` 
GROUP BY t1.Date,t2.country 
LIMIT 20; 


+------------+--------------+-------------+ 
| Date  | country  | PlayerCount | 
+------------+--------------+-------------+ 
| 2014-06-15 | Kuwait  | 1   | 
| 2014-06-21 | Kuwait  | 1   | 
| 2014-06-23 | Kuwait  | 1   | 
| 2014-10-10 | Kuwait  | 1   | 
| 2014-10-11 | Kuwait  | 1   | 
| 2014-10-12 | Jordan  | 1   | 
| 2014-10-13 | Jordan  | 1   | 
| 2014-10-13 | Saudi Arabia | 1   | 
| 2014-10-14 | Jordan  | 1   | 
| 2014-10-14 | Saudi Arabia | 1   | 
| 2014-10-15 | Jordan  | 1   | 
| 2014-10-15 | Latvia  | 1   | 
| 2014-10-15 | Saudi Arabia | 1   | 
| 2014-10-16 | Jordan  | 1   | 
| 2014-10-16 | Kuwait  | 1   | 
| 2014-10-16 | Latvia  | 1   | 
| 2014-10-16 | Saudi Arabia | 1   | 
| 2014-10-17 | Jordan  | 1   | 
| 2014-10-17 | Kuwait  | 1   | 
| 2014-10-17 | Russia  | 1   | 
+------------+--------------+-------------+ 

Я хотел бы Поворачивайте этот запрос с ограниченным количеством страны, и получить на это:

   Saudi Arabia Kuwait  Other 
2014-06-15     3  4   0 
2014-06-21     2  4   0 
2014-06-23     1  5   0 
2014-10-10     0  6   3 

Я пытался добавить

sum(if(t2.country = 'Saudi Arabia', sum(t1.countplayer),0)) as SaudiArabia, 

Как описано в нескольких учебных пособий, но я получаю ошибку ... (неправильное использование групповой функции).

Что вы предлагаете?

ответ

0

Вы можете использовать case и sum подобное;

SELECT 
    t1.Date, 
    sum(case when t2.country = 'Saudi Arabia' then 1 else 0 end) `Saudi Arabia`, 
    sum(case when t2.country = 'Kuwait' then 1 else 0 end) `Kuwait`, 
    sum(case when t2.country in ('Saudi Arabia', 'Kuwait') then 0 else 1 end) others 
FROM Online_customer_activity_v2 t1 
JOIN `players` t2 
ON t1.`Customers` = t2.`username` 
GROUP BY t1.Date 

Вы можете использовать if как,

SELECT 
    t1.Date, 
    sum(if(t2.country = 'Saudi Arabia', 1, 0)) `Saudi Arabia`, 
    sum(if(t2.country = 'Kuwait', 1, 0)) `Kuwait`, 
    sum(if(t2.country in ('Saudi Arabia', 'Kuwait'), 0, 1)) others 
FROM Online_customer_activity_v2 t1 
JOIN `players` t2 
ON t1.`Customers` = t2.`username` 
GROUP BY t1.Date 
0

Ваш синтаксис в сумме() является неправильным, и вы даже не нужно подзапрос:

SELECT t1.Date, 
     sum(if(t2.country = 'Saudi Arabia', 1,0)) as SaudiArabia 
FROM Online_customer_activity_v2 t1 

JOIN `players` t2 
ON t1.Customers = t2.`username` 
GROUP BY t1.Date