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

結合とグループ化のさまざまな組み合わせを試してきましたが、これにアプローチする方法がわかりません。この例では、各通常の色は 1 回だけカウントする必要がありますが、各レインボー ジェムは複数回カウントする必要があり、実際の問題では X 個の異なる「色」が存在します。

4

2 に答える 2

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'

これは、クエリが機能していることを示すためのフィドルです

于 2012-06-28T13:40:09.917 に答える
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で参照してください。

于 2012-06-28T13:39:57.013 に答える