mysql - 複数 - sql 結合 order by




MySQLテーブルで2番目に高い値を取得する (19)

私は従業員と給与のテーブルをそのように定義しています:

"name" (type: VARCHAR)
"salary" (type: INTEGER)

このテーブルで2番目に高い給与を得るためにどのようなクエリを使用できますか?


* N *番目の最も高い値を得るには、このソリューションを使用することをお勧めします。

SELECT * FROM `employees`  WHERE salary =
         (SELECT DISTINCT(salary) FROM `employees` 
         ORDER BY salary DESC LIMIT {N-1},1);

またはあなたと試すことができます:

SELECT * FROM `employees` e1 WHERE 
        (N-1) = (SELECT COUNT(DISTINCT(salary)) 
        FROM `employees` e2 
        WHERE e1.salary < e2.salary ); 

2番目に高いN = 2、3番目に高いN = 3など。


2番目、3番目、4番目......次のクエリを使用してN番目に高い給与を得る

SELECT MIN(salary) from employees WHERE salary IN( SELECT TOP N salary FROM employees ORDER BY salary DESC)

2番目の最高給与ではN = 2、3番目に高い給与ではN = 3など、Nをあなたの番号で置き換えます。 したがって、2番目に高い給与使用

SELECT MIN(salary) from employees WHERE salary IN( SELECT TOP 2 salary FROM employees ORDER BY salary DESC)

2番目に高い給与

 select max(salary) from salary where salary not in (select top 1 salary from salary order by salary desc)

3番目に高い給料

 select max(salary) from salary where salary not in (select top 2 salary from salary order by salary desc)

等々......


2番目に高い給与を得るには、以下のクエリを使用してください

SELECT salary FROM employees
ORDER BY salary DESC LIMIT 1,1;

n番目の最大給与を得るためにこれを試してみてください

私は転記する前にこれを試した&それはうまく動作します

例えば。 10番目の最大給与交代限度9,1を見つける。

mysql> select name,salary from emp group by salary desc limit n-1,1;


これを試して :

SELECT DISTINCT(`salary`)
    FROM `employee`

    ORDER BY `salary` DEC
    LIMIT 1,1

これは下記のクエリを使用することができます

SELECT emp.name, emp.salary 
FROM employees emp 
WHERE 2 = (SELECT COUNT(DISTINCT salary) 
           FROM employees 
           WHERE emp.salary<=salary
          );

2を希望の最高記録に変更することができます。


これを試して :

Proc sql;
  select employee, salary
  from (select * from test having salary < max(salary)) 
   having salary = max(salary)
  ;
Quit;

マークの次に大きな値を持つレコードを表示するには:

SELECT username, mark
FROM tbl_one
WHERE mark = (
    SELECT DISTINCT mark
    FROM tbl_one
    ORDER by mark desc
    LIMIT 1,1
); 

二番目に高い給与に対する真正面の答え

SELECT name, salary
FROM employees ORDER BY `employees`.`salary` DESC LIMIT 1 , 1

別の興味深い解決策

SELECT salary 
FROM emp 
WHERE salary = (SELECT DISTINCT(salary) 
                FROM emp as e1 
                WHERE (n) = (SELECT COUNT(DISTINCT(salary)) 
                             FROM emp as e2 
                             WHERE e1.salary <= e2.salary))

私はこの質問に答えるのにかなり遅れているようだ。 同じ出力を得るにはこのライナーはいかがですか?

SELECT DISTINCT salary FROM employees ORDER BY salary DESC LIMIT 1,1 ;

簡単な解決策

SELECT * FROM TBLNAME ORDER BY COLNAME ASC LIMIT (n - x), 1

注:n =列内のレコードの総数

  x = value 2nd, 3rd, 4th highest etc

例えば

//to find employee with 7th highest salary

n = 100
x = 7

SELECT * FROM tbl_employee ORDER BY salary ASC LIMIT 93, 1

お役に立てれば


SELECT MAX(salary) salary
FROM tbl
WHERE salary <
  (SELECT MAX(salary)
   FROM tbl);

SELECT MIN(id) as id FROM students where id>(SELECT MIN(id) FROM students);

SELECT name, salary
FROM EMPLOYEES
WHERE salary = ( 
SELECT DISTINCT salary
FROM EMPLOYEES
ORDER BY salary DESC 
LIMIT 1 , 1 ) 

SELECT name, salary
FROM employees
order by salary desc limit 1,1

このクエリはあなたの仕事をするはずです。 まず、降順でテーブルをソートしています。そのため、最高給与の人がトップになり、2番目に高いのが第2ポジションになります。 今度limit a,b要素の開始をスキップして、次のb要素を出力することを意味します。 この場合は、 limit 1,1を使用する必要があります。

お役に立てれば。


SELECT name,salary FROM employee
WHERE salary = (SELECT DISTINCT(salary) FROM employee ORDER BY salary DESC LIMIT 1,1) ORDER BY name

SELECT username, salary
FROM tblname
GROUP by salary
ORDER by salary desc
LIMIT 0,1 ;

with alias as
(
select name,salary,row_number() over(order by salary desc ) as rn from employees
)
select name,salary from alias where rn=n--n being the nth highest salary




mysql