2015-05-24 2 views
0

Мне нужна следующая таблица для запроса, чтобы получить результат, приведенный ниже таблицы.Как получить счет каждого отдельного значения в нескольких столбцах и получить результат в отдельных столбцах?

Таблица:

---------------------------------- 
| Name | Age | slot   | 
|-------|--------|---------------| 
|A  |20  | 1    | 
|B  |30  | 2    | 
|C  |30  | 1    |     
|D  |20  | 1    |     
|E  |40  | 2    |     
|F  |40  | 3    | 
|G  |50  | 3    | 
---------------------------------- 

Результат:

------------------------------------------- 
|Age |Age_Count  |Slot |Slot_Count| 
------------------------------------------- 
|20 | 2   |1  |3   | 
------------------------------------------- 
|30 | 2   |2  |2   | 
------------------------------------------- 
|40 | 2   |3  |2   | 
------------------------------------------- 
|50 | 1   | 
----------------------- 

При поиске StackOverflow я нашел this question for single column вопрос и есть [эта ссылка для нескольких столбцов] (get the count of each distinct value in "Multiple" columns) вопрос. Ответы со второй ссылки (для отдельного подсчета нескольких coulmn) отображаются под одним столбцом, и мое требование заключается в том, что я довольно сильно отличаюсь от ответов, размещенных там.

Заранее спасибо

+0

Что такое столбец 'slot' в вашей таблице результатов? Как это должно быть рассчитано? –

+0

Это любой слот, выделенный для идентификаторов. Расчет для него такой же, как и для возраста. Он рассчитает отдельные слоты и даст мне их количество. например У меня есть 3 слота с слотом 1, 2 слота с именем slot 2. поэтому в таблице результатов отображаются отдельные слоты под слотом slot и их счет в слоте slot_count. –

ответ

0

Ваш запрос является своего рода странным. Вы уверены, что хотите этого?

Если да, то это может помочь:

SET @x:=0,@y:=0,@m:=0,@n:=0; 
SELECT 
    DISTINCT age,age_count, slot,slot_count 
FROM (
    SELECT 
     age, age_count, slot, slot_count 
    FROM (
     SELECT 
      @x:[email protected] + 1 AS aid, age, COUNT(*) age_count 
     FROM 
      slots 
     GROUP BY age 
    ) a 
    LEFT JOIN (
     SELECT 
      @y:[email protected] + 1 AS sid, slot, COUNT(*) slot_count 
     FROM 
      slots 
     GROUP BY slot 
    ) s ON a.aid = s.sid 

    UNION 

    SELECT 
     age, age_count, slot, slot_count 
    FROM (
     SELECT 
      @m:[email protected] + 1 AS aid, slot, COUNT(*) slot_count 
     FROM 
      slots 
     GROUP BY slot 
    ) a 
    LEFT JOIN (
     SELECT 
      @n:[email protected] + 1 AS sid, age, COUNT(*) age_count 
     FROM 
      slots 
     GROUP BY age 
    ) s ON a.aid = s.sid 
) a 

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

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