3

次のデータがあるとしましょう。

id  name_id   completed
1    10          1
2    10          0
3    15          1
4    10          0
5    20          1
6    15          0
7    20          1 
8    15          0 

名前IDでカウントを見つけようとしていますが、これは非常に簡単です

SELECT name_id, COUNT(*) FROM db 
GROUP BY name_id

これで、クエリに含めたい 2 番目のコンポーネントができました。

name_id 10 については、completed が 1 の値だけをカウントしたいと思います。その他の name_id については、それらが 0 か 1 かに関係なくそれらを選択したいと思います。

だから私は次のようになるはずです:

name_id     count(*)
10            1
15            3
20            2

Name_id 10 のカウントは 1 だけです。完了したのは 1 だけだからです。他のカウントには 0 と 1 の両方が含まれます。

誰でもこのタスクを手伝ってもらえますか。

ありがとう!

4

4 に答える 4

4

You can use a CASE expression inside of your aggregate function.

SELECT name_id, 
  sum(case 
          when name_id = 10 
          then case when completed = 1 then 1 else 0 end
          else 1 end)  Total
FROM db 
GROUP BY name_id;

See SQL Fiddle with Demo.

于 2013-05-02T19:35:24.457 に答える
3

Exclude the rows where name_id = 10 and completed = 0:

SELECT name_id, COUNT(*) FROM db 
WHERE NOT (completed = 0 AND name_id = 10)
GROUP BY name_id
于 2013-05-02T19:35:47.143 に答える
1
SELECT name_id, COUNT(*) FROM db 
WHERE name_id != 10 or completed = 1
GROUP BY name_id
于 2013-05-02T19:37:20.247 に答える
1

が 10 でない場合に数えるname_id。10 の場合、completed= 1 の場合に数える:

SELECT
 name_id,
 COUNT(CASE WHEN name_id <> 10 or completed = 1 THEN 1 END)
FROM db
GROUP BY name_id
于 2013-05-02T19:37:23.090 に答える