3

基本的に異なるwhere句を使用してカウントするselectステートメントを見つけました。私の質問は、これらのカウントが列になるように、結果を1つのステートメントに組み合わせるにはどうすればよいですか?

  1. 表1からc1としてcount(*)を選択します。ここでcity ='nyc'
  2. 表1からc2としてcount(*)を選択します。ここでcity ='boston'
  3. 表1からc3としてcount(*)を選択します。ここでcity ='sf'
4

5 に答える 5

5
SELECT
  COUNT(CASE WHEN city = 'nyc' THEN 1 END) AS Nyc,
  COUNT(CASE WHEN city = 'boston' THEN 1 END) AS Boston,
  COUNT(CASE WHEN city = 'sf' THEN 1 END) AS Sf
FROM table
于 2013-02-26T22:01:52.003 に答える
2

を使用sum()してfiltering only required cities

select sum(case when city = 'nyc' then 1 end) c1,
       sum(case when city = 'boston' then 1 end) c2,
       sum(case when city = 'sf' then 1 end) c3
from table1
where city in ('nyc','boston','sf')
于 2013-02-26T22:02:48.963 に答える
2
select count(CASE WHEN city = 'nyc' THEN 1 END) as c1,
       count(CASE WHEN city = 'boston' THEN 1 END) as c2,       
       count(CASE WHEN city = 'sf' THEN 1 END) as c3
from table1

SQLFiddleのデモ

また、SQLServer2005 +では、OracleでPIVOT操作を使用できます。

SELECT *
FROM table1
PIVOT (
COUNT(city) FOR city IN ([nyc], [boston], [sf])
) p

SQLFiddleのデモ

于 2013-02-26T22:03:13.620 に答える
2

GROUPBYにチャンスを与えることができます。

SELECT city, gender, count(*)
WHERE gender = "male"
GROUP BY city, gender;
于 2013-02-26T22:09:05.270 に答える
1

完全を期すために)

select
    (select count(*) as c1 from table1 where city = 'nyc') as c1,
    (select count(*) as c2 from table1 where city = 'boston') as c2,
    (select count(*) as c3 from table1 where city = 'sf') as c3
于 2013-02-26T22:06:45.503 に答える