2

これがどのように機能するかを理解しようとしていますが、まだ理解できません。

私はこの単純なueryを作成して、case-when-then-end句をテストしました...

  SELECT case when quantity > 3
              then count(*) end the_count_a,
         case when quantity <= 3
              then count(*) end the_count_b
    FROM STOCK

私の在庫テーブルには数量の異なる30個のアイテムがあり、3個を超える数量のアイテムは10個だけですが、これは常に30個を返します。なぜですか。10と20の値を持つ2つの列を返す必要があると思います

どんな助けでもありがたいです!Thx、レオ

4

3 に答える 3

4

の値はcount(*)、配置されている場所に関係なく、(現在のグループ内の)すべてのレコードの数を意味します。条件に一致するレコードをカウントする場合は、caseステートメントを逆にする必要があります。

select count(case when quantity > 3 then 1 end) the_count_a,
       count(case when quantity <= 3 then 1 end) the_count_b
  from stock
于 2012-07-31T22:14:48.203 に答える
1
SELECT 
       count(case when quantity > 3 then 1 else null end) end the_count_a,
       count(case when quantity <= 3 then 1 else null end) end the_count_b
FROM STOCK
于 2012-07-31T22:15:39.850 に答える
0

COUNT()aがない場合の集計関数はGROUP BY、句によってフィルタリングされていないテーブル内のすべての行を返しますWHERE。あなたの場合、実際に必要なのはUNION、列または行を元に戻すかどうかに応じて、2つの副選択または。

/* Return columns with subselects */
SELECT
  (SELECT COUNT(*) FROM STOCK WHERE quantity > 3) AS the_count_a
  (SELECT COUNT(*) FROM STOCK WHERE quantity <= 3) AS the_count_b

MySQLはFROM句の存在に寛容であるため、外部クエリから省略できます。

/* Return rows instead of columns with UNION */
SELECT 
  COUNT(*) AS the_count,
  'the_count_a'
FROM STOCK WHERE quantity > 3
UNION ALL
SELECT 
  COUNT(*) AS the_count,
  'the_count_b'
FROM STOCK WHERE quantity <= 30
于 2012-07-31T22:15:21.037 に答える