ROW_NUMBER () в MySQL

Используйте .toggle () в jquery

$("#btnsearch").click(function () {
        $("#Show").toggle();
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" id="btnsearch" style="background-color: white">Search</button>
<div id="Show">ff</div>

268
задан shA.t 20 May 2015 в 23:20
поделиться

4 ответа

Мне нужна строка с единственным наивысшим столбцом col3 для каждой пары (col1, col2).

Это групповой максимум , один из наиболее часто задаваемых SQL вопросы (так как кажется, что это должно быть легко, но на самом деле это не так).

Я часто попадаюсь на самосоединение с нулевым значением:

SELECT t0.col3
FROM table AS t0
LEFT JOIN table AS t1 ON t0.col1=t1.col1 AND t0.col2=t1.col2 AND t1.col3>t0.col3
WHERE t1.col1 IS NULL;

«Получить строки в таблице, для которых нет другой строки с соответствием col1, col2 имеет более высокий col3 ». (Вы заметите, что это и большинство других решений для группового максимума будут возвращать несколько строк, если несколько строк имеют одинаковые столбцы col1, col2, col3. Если это проблема, вам может потребоваться некоторая постобработка.)

99
ответ дан 23 November 2019 в 02:21
поделиться

Это не большая часть надежного решения - но если Вы просто надеетесь создавать разделенный разряд на поле только с несколькими различными значениями, это не может быть неуправляемо для использования некоторого случая, когда логика со столькими переменными, сколько Вы требуете.

Что-то вроде этого работало на меня в прошлом:

SELECT t.*, 
   CASE WHEN <partition_field> = @rownum1 := @rownum1 + 1 
     WHEN <partition_field> = @rownum2 := @rownum2 + 1 
     ...
     END AS rank
FROM YOUR_TABLE t, 
   (SELECT @rownum1 := 0) r1, (SELECT @rownum2 := 0) r2
ORDER BY <rank_order_by_field>
;

Hope, которая имеет смысл / помогает!

0
ответ дан 23 November 2019 в 02:21
поделиться

В MySQL нет функции ранжирования. Самое близкое, что вы можете сделать, это использовать переменную:

SELECT t.*, 
       @rownum := @rownum + 1 AS rank
  FROM YOUR_TABLE t, 
       (SELECT @rownum := 0) r

, так как это будет работать в моем случае? Мне понадобятся две переменные, по одной для каждого из col1 и col2? Столбец 2 нужно будет как-то сбросить при изменении столбца 1?

Да. Если бы это был Oracle, вы могли бы использовать функцию LEAD, чтобы достичь следующего значения. К счастью, Quassnoi покрывает логику того, что вам нужно реализовать в MySQL .

198
ответ дан 23 November 2019 в 02:21
поделиться
SELECT 
    @i:=@i+1 AS iterator, 
    t.*
FROM 
    tablename AS t,
    (SELECT @i:=0) AS foo
58
ответ дан 23 November 2019 в 02:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: