3

私は次のクエリを持っています:

SELECT saturday_combinations.index, v.val AS  `row` , COUNT( * )  AS  `count` 
FROM saturday_combinations  
INNER JOIN (

SELECT ONE AS val
FROM saturday_combinations 
WHERE ONE IS NOT NULL 

UNION 
SELECT TWO AS val
FROM saturday_combinations
WHERE TWO IS NOT NULL 

UNION 
SELECT THREE AS val
FROM saturday_combinations
WHERE THREE IS NOT NULL 

UNION 
SELECT FOUR AS val
FROM saturday_combinations
WHERE FOUR IS NOT NULL 

UNION 
SELECT FIVE AS val
FROM saturday_combinations
WHERE FIVE IS NOT NULL


UNION 
SELECT SIX AS val
FROM saturday_combinations
WHERE SIX IS NOT NULL 

UNION 
SELECT SEVEN AS val
FROM saturday_combinations
WHERE SEVEN IS NOT NULL 

) v  ON v.val = saturday_combinations.ONE
  OR v.val = saturday_combinations.TWO
  OR v.val = saturday_combinations.THREE
  OR v.val = saturday_combinations.FOUR
  OR v.val = saturday_combinations.FIVE
  OR v.val = saturday_combinations.SIX
  OR v.val = saturday_combinations.SEVEN 
  GROUP BY v.val 

クエリの目的は、テーブルsaturday_combinationsの列ONE、TWO、THREE、FOUR、FIVE、SIX、およびSEVENに含まれるさまざまな値の数を提供することです。ただし、desc制限を4にして、最後の4行(最後の4つの最大インデックス)に基づいてカウントのみを実行するようにします。しかし、私はそれを組合と連携させることができていません。最後の4行を取得してそれらの分布を計算するのではなく、最後に順序と制限を追加すると、最終選択からの制限のみになります。任意のヒント?

テーブルスキーマは次のとおりです。

index | ONE|TWO|THREE|FOUR|FIVE|SIX|SEVEN
 1       1   3   7     10    11  12  13
 2       3   4   5     30    31  22  23
 3       1   2   3      4     5   6   7
 4       1   2   3      4     5   6   7
 5       1   2   3      4     5   6   7
 6       1   2   3      4     5   6   7
 7       1   2   3      4     5   6   7
 8       1   2   3      4     5   6   7
 9       1   2   3      4     5   6   7
 10      1   2   3      4     5   6   7

インデックスは自動インクリメントであり、ONE-SEVENには整数値があります。

テーブルには約3000行あり、最後のn行に基づいて各値の発生をカウントしたいと思います。

Ideal result for the last n rows where n = last 3 rows should be
Numbers|Count
   1       3
   2       3
   3       3
   4       3
   5       3
   6       3
   7       3

nを増やして最後の6行を含めると、それらの数が増えるはずです。私が10行続くことができれば、カウントは増加し、他の数値はそれらのカウントとともに表示されるはずです。

これが実際のテーブルのサンプルへのリンクです。 http://sqlfiddle.com/#!2/d035b

4

3 に答える 3

2

私のコメントへの答えがその場合はyes、次のことを試すことができます。追加limit, order byする必要がある場合は、かっこで囲むunion selects必要があります。union queries()

コード:

(SELECT ONE AS val
FROM saturday_combinations 
WHERE ONE IS NOT NULL 
order by ONE desc limit 4)

UNION 
(SELECT TWO AS val
FROM saturday_combinations
WHERE TWO IS NOT NULL 
order by TWO desc limit 4)

UNION 
(SELECT THREE AS val
FROM saturday_combinations
WHERE THREE IS NOT NULL 
order by THREE desc limit 4)

私のコメントへの回答が の場合はno、明確にしてください。

サンプル日付に基づくコードは次のとおりです。

select distinct x.one as uniqunumbers,
count(x.one) as counts
from(
sELECT DISTINCT 'one' 
AS col1, one FROM sat_comb
UNION ALL
SELECT DISTINCT 'two' 
AS col1, two FROM sat_comb
UNION ALL
SELECT DISTINCT 'three' 
AS col1, three FROM sat_comb
) as x
group by x.one;

UNIQUNUMBERS    COUNTS
1               1
3               2
4               1
5               1
7               1

OPに従って編集すると、質問が明確になり、更新されました。

引用:「しかし、最初に最後のn行を取り、次にそれらのn行の値をカウントするように制限したい。これは、3000行の3つの列と、これらの3000にランダムに現れる35の整数がある場合を意味する各整数が何回出現するかをカウントする必要があります。」

クエリ:

select x.one as uniqunumbers,
    count(x.one) as counts
    from(
    (sELECT DISTINCT 'one' 
    AS col1, one FROM sat_comb
     order by id desc limit 4)
    UNION ALL
    (SELECT DISTINCT 'two' 
    AS col1, two FROM sat_comb
     order by id desc limit 4)
    UNION ALL
    (SELECT DISTINCT 'three' 
    AS col1, three FROM sat_comb
     order by id desc limit 4)
      UNION ALL
    (SELECT DISTINCT 'four' 
    AS col1, four FROM sat_comb
     order by id desc limit 4)
      UNION ALL
    (SELECT DISTINCT 'five' 
    AS col1, five FROM sat_comb
     order by id desc limit 4)
      UNION ALL
    (SELECT DISTINCT 'six' 
    AS col1, six FROM sat_comb
     order by id desc limit 4)
      UNION ALL
    (SELECT DISTINCT 'seven' 
    AS col1, seven FROM sat_comb
     order by id desc limit 4)
    ) as x
    group by x.one;

出力:

UNIQUNUMBERS    COUNTS
2               4
3               3
4               3
5               4
6               4
8               3
9               4
20              3
于 2013-01-05T01:09:48.573 に答える
2

リクエストに何か不足している可能性がありますが、希望する結果に基づいて、データのピボットを解除してカウントを実行してみませんか.

select value, count(*) Total
from
(
  select 'one' col, one value
  from saturday_combinations
  union all
  select 'two' col, two value
  from saturday_combinations
  union all
  select 'three' col, three value
  from saturday_combinations
  union all
  select 'four' col, four value
  from saturday_combinations
  union all
  select 'five' col, five value
  from saturday_combinations
  union all
  select 'six' col, six value
  from saturday_combinations
  union all
  select 'seven' col, seven value
  from saturday_combinations
) src
group by value

デモで SQL Fiddle を参照してください

サンプルの結果は次のとおりです。

| VALUE | TOTAL |
-----------------
|     1 |     1 |
|     3 |     2 |
|     4 |     1 |
|     5 |     1 |
|     7 |     1 |
|    10 |     1 |
|    11 |     1 |
|    12 |     1 |
|    13 |     1 |
|    22 |     1 |
|    23 |     1 |
|    30 |     1 |
|    31 |     1 |

編集#1:更新に基づいて、これはあなたに何を望んでいるかもしれません:

select value, count(*)
from
(
  select col, value
  from
  (
    select 'one' col, one value
    from saturday_combinations
    order by one 
    limit 3
  ) one
  union all
  select col, value
  from
  (
    select 'two' col, two value
    from saturday_combinations
    order by two desc
    limit 3
  ) two
  union all
  select col, value
  from
  (
    select 'three' col, three value
    from saturday_combinations
    order by three 
    limit 3
  ) three
  union all
  select col, value
  from
  (
    select 'four' col, four value
    from saturday_combinations
    order by four 
    limit 3
  ) four
  union all
  select col, value
  from
  (
    select 'five' col, five value
    from saturday_combinations
    order by five 
    limit 3
  ) five
  union all
  select col, value
  from
  (
    select 'six' col, six value
    from saturday_combinations
    order by six 
    limit 3
  ) six
  union all
  select col, value
  from
  (
    select 'seven' col, seven value
    from saturday_combinations
    order by seven 
    limit 3
  ) seven
) src
group by value

デモで SQL Fiddle を参照してください

結果:

| VALUE | COUNT(*) |
--------------------
|     1 |        3 |
|     2 |        1 |
|     3 |        4 |
|     4 |        4 |
|     5 |        3 |
|     6 |        3 |
|     7 |        3 |
于 2013-01-05T02:46:43.793 に答える
0

最終的な解決策を見たい場合: http://sqlfiddle.com/#!2/867a6/13 @bonCodigo に感謝します。

于 2013-01-05T14:58:55.680 に答える