1

以下のようなテーブルがあります

Col1    Col2    Col3
*         $       *
$         *       *
#         *       $
%         *       *
*         *       $
*         @       $

テーブルに存在するstars(*)の数をSQLクエリでカウントしたい。

1つのオプションは、次の方法でクエリを作成することです。

select ((select count(*) from star_table where col1='*') + 
(select count(*) from star_table where col2='*') +
(select count(*) from star_table where col3='*')) as count from dual.

同じ結果を得るためにクエリを書く別の方法があるかどうか知りたいです。

4

4 に答える 4

2
select sum(
             case when col1='*' then 1 else 0 end +
             case when col2='*' then 1 else 0 end +
             case when col3='*' then 1 else 0 end            
       ) 
from star_table;  

更新:列に文字長の文字列が含まれている場合は、次のことができます。

select sum(3 - length(replace(col1||col2||col3,'*')))
from star_table; 

あなたはこれを求めました:)

于 2013-01-21T10:43:15.763 に答える
1

してみてください:

SELECT SUM(
    (CASE WHEN Col1='*' THEN 1 ELSE 0 END)+
    (CASE WHEN Col2='*' THEN 1 ELSE 0 END)+
    (CASE WHEN Col3='*' THEN 1 ELSE 0 END)) 
FROM TableName
于 2013-01-21T10:41:51.000 に答える
0

これはどう?

SQLFIDDLE MYSQL DEMO

select sum(col1='*') + sum(col2='*') + sum(col3='*')
from yourtable

SQLServerの場合は次のとおりです。

select sum(patindex('*',col1)) +
sum(patindex('*',col2)) +
sum(patindex('*',col3))
from stars
;

SQLFIDDLESQLサーバーデモ

結果:

| TOTALSTARS |
--------------
|         10 |

Florinが指摘するまで、私はあなたのSQL開発者をSQLサーバーと間違えました。ここにOracleバージョンがあります。

SQLFIDDLEデモオラクル

select sum(instr('*',col1)) +
sum(instr('*',col2)) +
sum(instr('*',col3)) as TotalStars
from stars
;

結果:

| TOTALSTARS |
--------------
|         10 |
于 2013-01-21T10:45:24.097 に答える
0

これはどう?

    select sum(decode(col1,'*',1,0)+decode(col2,'*',1,0)+decode(col3,'*',1,0)) 
    from tab;
于 2013-01-21T11:17:26.703 に答える