2013-07-01 2 views
2

У меня есть таблица:подсчета суммы в качестве столбца в MySQL

id | type | subtype 

как я буду создавать запрос для вывода следующего

type1 | subtype1 | count-subtype1 | count-type1 
type1 | subtype2 | count-subtype2 | count-type1 
type2 | subtype3 | count-subtype3 | count-type2 
type2 | subtype4 | count-subtype4 | count-type2 

именно субтотальным как столбец в выходном.

При отсутствии "С ROLLUP"

+0

спасибо, ответ на @ SQL.injection решается вопрос – Crimix

ответ

1

Для awnser этого запроса успешно (и это, где некоторые awsers терпят неудачу) является то, что вам нужно знать, что roollup делает. Если вы не хотите выполнять «ручной» пакет sql, есть еще один ответ, по которому решается ваш запрос.

Что вам нужно - это два запроса, один для подсчета подтипов внутри типов и другой для подсчета типов.

сначала подсчитайте подтипы (и позвоните по этому запросу s).

select count(*) count_subtype, type, subtype from Foo group by type, subtype; 

и еще один запрос для подсчета типов (и позволяет вызвать этот запрос t).

select count(*) count_type, type from Foo froup by type 

и теперь вам нужно объединить два запроса:

select t.type, s.subtype, s.count_subtype, t.conttype from 
     (select count(*) count_subtype, type, subtype from Foo group by type, subtype) as s 
    join 
     (select count(*) count_type, type from Foo froup by type) as t 
      on (t.type=s.type); 
+0

как шарм !! спасибо, лот! – Crimix

0

Запрос:

SELECT type, subtype, sum(type), sum(subtype) from table_name GROUP BY id 
1

Если предположить, что у меня есть эта структура таблицы:

CREATE TABLE `test` (
    `id` int(11) NOT NULL auto_increment, 
    `type` varchar(128) default NULL, 
    `subtype` varchar(128) default NULL, 
    KEY `id` (`id`)); 

И эти данные:

INSERT INTO `test` VALUES (1,'a','1'),(2,'a','2'),(3,'a','3'),(4,'a','4'),(5,'b','4'), 
(6,'c','4'),(7,'c','1'),(8,'c','2'),(9,'c','2'); 

я могу это сделать:

SELECT test.type, test.subtype, count(test.subtype) as countsubtype, testbytype.counttype 
FROM (test) 
LEFT JOIN (SELECT type, count(type) AS counttype FROM test group by type) AS testbytype ON test.type = testbytype.type 
GROUP by type, subtype; 

+------+---------+--------------+-----------+ 
| type | subtype | countsubtype | counttype | 
+------+---------+--------------+-----------+ 
| a | 1  |   1 |   4 | 
| a | 2  |   1 |   4 | 
| a | 3  |   1 |   4 | 
| a | 4  |   1 |   4 | 
| b | 4  |   1 |   1 | 
| c | 1  |   1 |   4 | 
| c | 2  |   2 |   4 | 
| c | 4  |   1 |   4 | 
+------+---------+--------------+-----------+ 
Смежные вопросы