0
id  one two thr fou five
1   37  84  1   68  10
2   72  50  87  41  67
3   66  30  89  57  48
4   29  27  35  75  36
5   2   72  9   1   55
6   33  89  17  40  64
7   70  90  63  26  54
8   36  19  51  43  61
9   10  61  20  44  84
10  2   41  43  65  87

上の表の各数字を逆算する必要があります。

例:

61=>1 because if you count from the bottom to the first 61 there's 1 row
26=>3 because if you count from the bottom to the first 26 there are 3 rows
9=>5 because if you count from the bottom to the first 9 there are 5 rows
and so on...

クエリは、すべての数値に対して次のようなテーブルを出力する必要があります。

Number  Rows count
61  1
26  3
9   5

ここでの問題は次のとおりです: mySQL でカウントを逆にする方法は? 特別な機能はありますか?ありがとうございました

4

4 に答える 4

1

UNPIVOTMySQLに次の機能があれば、これはよりクリーンになります。

SELECT x.num, co.co - count(x.id) FROM
    (SELECT count(id) as co FROM tab) as co, 
    (SELECT t.num, max(t.id) as 'id' FROM
        (SELECT id, one as 'num' FROM tab
        UNION
        SELECT id, two as 'num' FROM tab
        UNION
        SELECT id, thr as 'num' FROM tab
        UNION
        SELECT id, fou as 'num' FROM tab
        UNION
        SELECT id, fiv as 'num' FROM tab) as t
    GROUP BY t.num) as x
    INNER JOIN
    (SELECT id FROM tab) as y on x.id >= y.id
GROUP BY x.num, co.co
于 2012-08-29T14:04:20.197 に答える
0
select COUNT(*) from TestTbl
where id > (select max(id) from TestTbl
where one='9' or two ='9' or three='9' or four='9' or five='9')

select COUNT(*) from TestTbl
where id > (select max(id) from TestTbl
where one='26' or two ='26' or three='26' or four='26' or five='26')

select COUNT(*) from TestTbl
where id > (select max(id) from TestTbl
where one='61' or two ='61' or three='61' or four='61' or five='61')
于 2012-08-29T13:02:09.340 に答える
0

これが私が思いついたものです。それは醜いです。

select num, t1.max - t2.id as reverse_count from 
(select max(id) as max from testtable) as t1, 
(select id, row1 as num from testtable union all select id, 
 row2 as num from testtable union all select id, 
 row3 as num from testtable union all select id, 
 row4 as num from testtable) as t2;

正しい命名スキーマを使用するように編集

select num as Number, t1.max - t2.id as RowsCount from 
(select max(id) as max from testtable) as t1, 
(select id, one as num from testtable union all select id, 
 two as num from testtable union all select id, 
 thr as num from testtable union all select id, 
 fou as num from testtable union all select id, 
 five as num from testtable) as t2;
于 2012-08-29T13:27:06.893 に答える
0

必要な数を (Count(*) - id) で取得できます。それを行う必要がある id で注文する場合。

そうでない場合、ID が適切でない場合は @curRow タグを使用できると思います。これらの他の質問を見てください:

MySQLはORDER BYで行の位置を取得します

MySQL で、テーブル内のレコード インデックスを含む列を生成するにはどうすればよいですか?

于 2012-08-29T12:43:03.603 に答える