ВЫБРАТЬ ... ГРУППИТЬ ПО - PullRequest
2 голосов
/ 05 марта 2010
id  - a_id  -  a_type
---------------------------
1      9       Granny Smith
2      9       Pink Lady
---------------------------
3      3       Pink Lady 
4      3       Fuji 
5      3       Granny Smith
---------------------------
6      7       Pink Lady
7      7       Fuji 
8      7       Fuji
9      7       Granny Smith

Хорошо, при условии, что у нас есть таблица Apple sql, как указано выше; мой вопрос, возможно ли получить результат, как показано ниже, с одним запросом?

[0] => Array
    (
        [0] => a_id: 7
        [1] => Pink Lady: 1
        [2] => Granny Smith: 1
        [3] => Fuji: 2
    )

[1] => Array
    (
        [0] => a_id: 9
        [1] => Granny Smith: 1
        [2] => Pink Lady: 1
        [3] => 
    )
...

PS: мой собственный запрос такой:

SELECT a_type , a_id , 
COUNT(a_type) AS tot 
FROM #apple 
GROUP by a_id , a_type 
HAVING tot > 0 
ORDER BY a_type DESC

но это не делает то, что мне нужно, оно производит более одного a_id.

Ответы [ 4 ]

2 голосов
/ 05 марта 2010

SELECT a_id, a_type, COUNT (*) ИЗ Apple GROUP BY a_id, a_type

Это даст вам список различных кортежей a_id и a_type, но вам все равно придется проанализировать список, чтобы объединить этиодного и того же a_id в одну хеш-таблицу.

Или, если вы хотите, за один шаг, агрегировать все по a_id, сделайте это

SELECT a_id,GROUP_CONCAT(type_count)
  FROM (SELECT a_id,a_type,CONCAT(a_type,",",COUNT(*)) as type_count
          FROM Apple GROUP BY a_id,a_type) as x
 GROUP BY a_id;

Это даст вам:

7    Pink Lady,1,Granny Smith,1,Fuji 2
9    Granny Smith,1,Pink Lady,1

По поводу моего комментария: если у вас есть MySQL, это то, что вы получаете

Создавая точную таблицу, которая у вас есть, с точными данными и запустив мой запрос, я получаю следующее.

mysql> SELECT a_id,GROUP_CONCAT(type_count) FROM (SELECT a_id,a_type,CONCAT(a_type,",",COUNT(*)) as type_count FROM Apple GROUP BY a_id,a_type) as x  GROUP BY a_id;

|    3 | Fuji,1,Granny Smith,1,Pink Lady,1 | 
|    7 | Fuji,2,Granny Smith,1,Pink Lady,1 | 
|    9 | Granny Smith,1,Pink Lady,1        | 
1 голос
/ 05 марта 2010

Вы можете создать такой список с помощью group by:

select a_id, a_type, count(*)
from AppleTable
group by a_id, a_type
0 голосов
/ 05 марта 2010

Используйте distinct и group by, как это

select distinct(a_id), a_type, count(a_type) as total_types
from Apple
group by a_id, a_type;

Таким образом, вы получаете идентификатор Apple и его типы, а также количество (id, type) результатов в группе.

0 голосов
/ 05 марта 2010
SELECT * FROM table group by a_id

с помощью оператора group by вы можете сгруппировать данные по одному или нескольким столбцам Заявление GroupBy

...