6

最近、正常にコンパイルされ、目的の結果を返すクエリを作成しました。そのコードを、stackoverflow のユーザーが思いついた別のコードのサブクエリとして使用したところ、いくつかの問題が発生しましたが、最終的には解決されました。このクエリを、与えられたコードのサブクエリとして使用しようとしました。ただし、sql fiddle は何も返しません。エラーやコンパイル済みメッセージはありません。ランダムな + 記号のように、意図的に構文エラーを入れてみましたが、何も起こりませんでした。クエリが長すぎるためですか?

スキーマ

CREATE TABLE sampleData 
    (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
      timecode int, 
     count int,
      PRIMARY KEY (id)
    )
#ENGINE=MyISAM
;

INSERT INTO sampleData
(timecode, count)
VALUES
(1344893440, 1), ( 1346014720, 1),( 1344898688,1),( 1345654784,1),( 1345978368,1),
( 1345959296,1), (1345064704,1), ( 1345156352,1),( 1345225600,1),
(1345017984,1),( 1345640960,1),( 1346019968,1),( 1345834752,1),
( 1345438464,1),( 1344986880,1),( 1345045632,1),( 1345557888,1),( 1344973056,1),( 1345087232,1),( 1345433216,1),( 1345691008,1),
( 1344917760,1),( 1345253248,1),( 1344934912,1),( 1345890048,1),( 1345272448,1), (1345829504,1),( 1345798400,1),( 1345203200,1),( 1344741120,1),
( 1345175552,1),( 1344824192,1),( 1344926336,1),( 1345571712,1),( 1344931584,1),( 1345211776,1),( 1345059456,1),( 1345516288,1),( 1345441920,1),( 1346009472,1)

クエリ

select t_0.*,
           (coalesce(t_3.average_number_of_votes_per_previous_period_days, 0) - coalesce(t_4.average_number_of_votes_per_previous_period_days, 0)) * 100.0
    from 
        (select t.*,
           (coalesce(t_1.count, 0) - coalesce(t_2.count, 0)) * 100.0 as "percentage increase in count in %"
    from  
    (
      SELECT sum(1) AS ordr,
      t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days"

      FROM 
        (SELECT  id, date(FROM_UNIXTIME( timecode))  AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
        FROM sampleData
        GROUP BY DAY) t1
        INNER JOIN 
        (SELECT date(FROM_UNIXTIME( timecode) ) AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
        FROM sampleData
        GROUP BY DAY) t2 
        on t1.day >= t2.day                                                                                                                                
        GROUP BY t1.day, t1.count
        ORDER BY t1.day
        )t 
      left outer join
         (
          SELECT sum(1) AS ordr,
            t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days"
          FROM 
            (SELECT  id, date(FROM_UNIXTIME( timecode))  AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
            FROM sampleData
            GROUP BY DAY) t1
          INNER JOIN 
            (SELECT date(FROM_UNIXTIME( timecode) ) AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
            FROM sampleData
            GROUP BY DAY) t2 
          on t1.day >= t2.day                                                                                                                                
          GROUP BY t1.day, t1.count
          ORDER BY t1.day
          )t_1
       on t.ordr = t_1.ordr + 1 left outer join
         (
          SELECT sum(1) AS ordr,
            t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days"
          FROM 
              (SELECT  id, date(FROM_UNIXTIME( timecode))  AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
              FROM sampleData
              GROUP BY DAY) t1
            INNER JOIN 
              (SELECT date(FROM_UNIXTIME( timecode) ) AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
              FROM sampleData
              GROUP BY DAY) t2 
            on t1.day >= t2.day                                                                                                                                
            GROUP BY t1.day, t1.count
            ORDER BY t1.day
            ) t_2
        on t.ordr = t_2.ordr + 2)t_0 
    left outer join
         (select t.*,
           (coalesce(t_1.count, 0) - coalesce(t_2.count, 0)) * 100.0 as "percentage increase in count in %"
    from  
    (
      SELECT sum(1) AS ordr,
      t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days"

      FROM 
        (SELECT  id, date(FROM_UNIXTIME( timecode))  AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
        FROM sampleData
        GROUP BY DAY) t1
        INNER JOIN 
        (SELECT date(FROM_UNIXTIME( timecode) ) AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
        FROM sampleData
        GROUP BY DAY) t2 
        on t1.day >= t2.day                                                                                                                                
        GROUP BY t1.day, t1.count
        ORDER BY t1.day
        )t 
      left outer join
         (
          SELECT sum(1) AS ordr,
            t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days"
          FROM 
            (SELECT  id, date(FROM_UNIXTIME( timecode))  AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
            FROM sampleData
            GROUP BY DAY) t1
          INNER JOIN 
            (SELECT date(FROM_UNIXTIME( timecode) ) AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
            FROM sampleData
            GROUP BY DAY) t2 
          on t1.day >= t2.day                                                                                                                                
          GROUP BY t1.day, t1.count
          ORDER BY t1.day
          )t_1
       on t.ordr = t_1.ordr + 1 left outer join
         (
          SELECT sum(1) AS ordr,
            t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days"
          FROM 
              (SELECT  id, date(FROM_UNIXTIME( timecode))  AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
              FROM sampleData
              GROUP BY DAY) t1
            INNER JOIN 
              (SELECT date(FROM_UNIXTIME( timecode) ) AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
              FROM sampleData
              GROUP BY DAY) t2 
            on t1.day >= t2.day                                                                                                                                
            GROUP BY t1.day, t1.count
            ORDER BY t1.day
            ) t_2
        on t.ordr = t_2.ordr + 2) t_3
         on t.ordr = t_3.ordr + 1 
    left outer join
         (select t.*,
           (coalesce(t_1.count, 0) - coalesce(t_2.count, 0)) * 100.0 as "percentage increase in count in %"
    from  
    (
      SELECT sum(1) AS ordr,
      t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days"

      FROM 
        (SELECT  id, date(FROM_UNIXTIME( timecode))  AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
        FROM sampleData
        GROUP BY DAY) t1
        INNER JOIN 
        (SELECT date(FROM_UNIXTIME( timecode) ) AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
        FROM sampleData
        GROUP BY DAY) t2 
        on t1.day >= t2.day                                                                                                                                
        GROUP BY t1.day, t1.count
        ORDER BY t1.day
        )t 
      left outer join
         (
          SELECT sum(1) AS ordr,
            t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days"
          FROM 
            (SELECT  id, date(FROM_UNIXTIME( timecode))  AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
            FROM sampleData
            GROUP BY DAY) t1
          INNER JOIN 
            (SELECT date(FROM_UNIXTIME( timecode) ) AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
            FROM sampleData
            GROUP BY DAY) t2 
          on t1.day >= t2.day                                                                                                                                
          GROUP BY t1.day, t1.count
          ORDER BY t1.day
          )t_1
       on t.ordr = t_1.ordr + 1 left outer join
         (
          SELECT sum(1) AS ordr,
            t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days"
          FROM 
              (SELECT  id, date(FROM_UNIXTIME( timecode))  AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
              FROM sampleData
              GROUP BY DAY) t1
            INNER JOIN 
              (SELECT date(FROM_UNIXTIME( timecode) ) AS day,(FROM_UNIXTIME( timecode)) AS original, COUNT(1)  as 'count'
              FROM sampleData
              GROUP BY DAY) t2 
            on t1.day >= t2.day                                                                                                                                
            GROUP BY t1.day, t1.count
            ORDER BY t1.day
            ) t_2
        on t.ordr = t_2.ordr + 2) t_4
        on t_0.ordr = t_4.ordr + 2
4

1 に答える 1

6

このフィドルにクエリを挿入しましたが、問題がわかりました。クエリの長​​さが 8000 文字 (正確には 8423 文字) を超えているため、結果パネルにそのメッセージを表示していません。基本的に、これは SQL Fiddle の表示上のバグで、私は以前は気付きませんでした (つまり、これを知らせてくれてありがとう!)。

それまでの間、8000 文字の制限内に収まるように一部の文字を切り取ってみてください。

于 2012-08-15T22:00:41.643 に答える