2012-06-28 2 views
1

У меня есть таблица, как этотКак сделать запрос, когда несколько строк подсчитываются несколько раз?

gems 
---------- 
id, color 
1 , green 
2 , green 
3 , blue 
4 , red 
5 , red 
6 , red 
7 , rainbow <<<<< OMNI COLOR 
8 , rainbow <<<<< OMNI COLOR 

И я пытаюсь получить результаты как этот

color count, each rainbow is added to each color 
--------------- 
color , count 
green , 4 
blue , 3 
red , 5 

Я пытался различные комбинации соединений и групп, но я площадках не уверен как подойти к этому. В этом примере каждый нормальный цвет следует подсчитывать только один раз, но каждый драгоценный камень радуги нужно пересчитывать несколько раз, а в реальной задаче есть Х количество различных «цветов»

ответ

3
SELECT `color`, (count(*) + rb.`cnt`) AS `count` 
FROM gems, 
    (SELECT COUNT(*) AS `cnt` FROM gems WHERE color='rainbow') AS rb 
GROUP BY `color` 
HAVING `color`<>'rainbow' 

Here - это скрипка, показывающая, что запрос работает.

+0

Вы не прочитали вопрос. – Cylindric

+0

@Cylindric Edited. – Sirko

+0

@eggyal В показанном примере нет «радуги». – Sirko

2

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

SELECT color, 
     COUNT(*) + t.rainbows AS count 
FROM  gems 
    JOIN (SELECT COUNT(*) AS rainbows FROM gems WHERE color = 'rainbow') AS t 
WHERE color <> 'rainbow' 
GROUP BY color 

видеть на sqlfiddle.

+0

также это не мои фактические имена таблиц и столбцов; p – Matt

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