2

私はこのようなテーブルを持っています。

+----+---------+-------------+
| id | user_id | screenWidth |
+----+---------+-------------+
|  1 |       1 |        1366 |
|  2 |       1 |        1366 |
|  3 |       1 |        1366 |
|  4 |       1 |        1366 |
|  5 |       2 |        1920 |
|  6 |       2 |        1920 |
|  7 |       3 |        1920 |
|  8 |       4 |        1280 |
|  9 |       5 |        1280 |
| 10 |       6 |        1280 |
+----+---------+-------------+

他のデータのロードと一緒に。これは必要に応じて正規化できます。元々は必要だとは思いませんでしたが、おそらく必要です。ともかく、

screenWidthの値をユーザーごとに1回だけカウントするクエリが欲しいので、出力は次のようになります。

+-------------+-------+
| screenWidth | count |
+-------------+-------+
|        1366 |     1 |
|        1920 |     2 |
|        1280 |     3 |
+-------------+-------+

1366を4として数えるのではなく、これにより、ヘビーユーザーがデータを歪めることを回避できます。

これを行うためのクエリを作成する方法はありますか?

4

2 に答える 2

6

短くてシンプル:使用COUNT DISTINCT

SELECT
  screenWidth,
  COUNT(DISTINCT user_id)
FROM
  mytable
GROUP BY
  screenWidth;
于 2012-04-29T15:02:59.000 に答える
5

画面幅ごとのユーザー数を DISTINCT で取得する必要があります。結果を取得するサンプル クエリを次に示します。

SQL Fiddle でデモを表示するには、ここをクリックしてください

スクリプト:

CREATE TABLE screenwidth 
(
    id INT NOT NULL
  , user_id INT NOT NULL
  , screenwidth INT NOT NULL
);

INSERT INTO screenwidth (id, user_id, screenwidth) VALUES
  (1, 1, 1366),
  (2, 1, 1366),
  (3, 1, 1366),
  (4, 1, 1366),
  (5, 2, 1920),
  (6, 2, 1920),
  (7, 3, 1920),
  (8, 4, 1280),
  (9, 5, 1280),
  (10, 6, 1280);

SELECT      screenwidth
        ,   COUNT(DISTINCT user_id) AS screenwidthcount
FROM        screenwidth
GROUP BY    screenwidth
ORDER BY    screenwidthcount;

出力:

SCREENWIDTH SCREENWIDTHCOUNT
----------- ----------------
1366               1
1920               2
1280               3
于 2012-04-29T15:06:35.050 に答える