0

(idを除いて)3つの列を持つテーブルがあります:

  • トピック
  • ユーザー
  • ip

Topicnullにすることはできませんが、他の2つはnullにすることができます。固有の制限はありません。

したがって、データの例は次のようになります。

ここに画像の説明を入力してください

私が取得したいのは、との明確な組み合わせでuserありip、トピックごとにグループ化された結果の行をカウントします。

ここに画像の説明を入力してください

編集:

わかりました、最初の人気のある答えは次のとおりです。

SELECT topic, COUNT(IP)
FROM MyTable
GROUP BY topic;

しかし、ユーザー列を無視しているようですが、なぜですか?たぶん私の例は良くありませんでした:)

新しいレコードを追加しましょう:

ここに画像の説明を入力してください

上記のクエリを実行すると同じ結果が得られますが、間違っています。

SELECT DISTINCT topic, user, ip FROM MyTable;

それは戻ります:

ここに画像の説明を入力してください

したがって、この場合、合計は次のようになります。

ここに画像の説明を入力してください

4

4 に答える 4

0

これを試して:

SELECT topic, COUNT(IP)
FROM MyTable
GROUP BY topic
于 2012-08-20T16:55:26.780 に答える
0

期待する結果の場合、これはクエリです。

select topic, count(ip)
from YourTable
group by topic

COUNTnull以外の値のみをカウントすることに注意してください。

アップデート

あなたの版とさらなる明確化の後、あなたはこれをすることができます:

select topic, count(*)
from (SELECT DISTINCT topic, user, ip FROM YourTable) sel
group by topic

またはこれ:

select topic, count(distinct cast(ip as varchar) + '#' + cast(user as varchar))
from YourTable
group by topic

この2番目の方法では、クエリはRDBMS(指定しなかった)によって異なる場合があります。データ型、および連結演算子/関数が変更される可能性があります。その背後にある概念は、2つの異なる列を含むことはできないDISTINCTためCOUNT、それらを連結する必要があるということです。#キャラクターは、と1#11は違うことを確認するためだけのもの11#1です。

于 2012-08-20T16:55:27.627 に答える
0
SELECT Topic, COUNT(*) [Count]
FROM table
WHERE IP IS NOT NULL
GROUP BY Topic

サンプル:

-- preparing the data
DECLARE @tbl TABLE (Topic int, [User] int, IP varchar(20))
INSERT INTO @tbl VALUES
(1,1,null),
(1,1,null),
(1,1,null),
(1,null,'127.0.0.1'),
(1,null,'127.0.0.1'),
(2,1,null),
(2,null,'127.0.0.1'),
(2,null,'127.0.0.1');

-- getting the resuls
SELECT Topic, COUNT(*) [Count]
FROM @tbl
WHERE IP IS NOT NULL
GROUP BY Topic

編集された質問の場合:

;WITH TMP AS
(
    SELECT DISTINCT topic, [user], ip
    FROM @tbl
) 
SELECT Topic, COUNT(*)
FROM TMP
GROUP BY Topic
于 2012-08-20T16:55:47.010 に答える
-1

あなたがこれを行うことができるかどうかわからない

select  topic, count(COALESCE(topic,'null') + COALESCE(ip,'null')) from table
group by COALESCE(topic,'null') + COALESCE(ip,'null')
于 2012-08-20T16:57:04.847 に答える