MySQLでdistinctを使用する方法+リートコードのMySql質問619。1回だけ表示される最大数+1076。プロジェクト従業員II + 178。スコアランキング

出典:
免責事項:私が誰かの権利を侵害した場合は、私に連絡してください。削除します。
専門家を歓迎して私にスプレーしてください。

MySQLでdistinctを使用する方法

テストテーブル:
ここに画像の説明を挿入

  1. 複数の列で操作する

table_3から個別のorderid、foodName、priceを選択します。>人から別の国、州を選択する

個別が複数のフィールドに適用される場合、その適用範囲は次のとおりです。その後のすべてのフィールド、その隣のフィールドだけでなく、distinctはすべてのフィールドの前にのみ配置できます。次のステートメントは間違っています。

table_3からorderid、foodName、個別の価格を選択します。
> SELECT国、人とは異なる州; //このステートメントは間違っています

  1. DistinctはNULLをフィルタリングしません。つまり、返される結果にはNULL値が含まれます。

619.一度だけ現れる最大の数

タイトル説明

リンク:https://leetcode-cn.com/problems/biggest-single-number

テーブルmy_numbersのnumフィールドには、多くの繰り返し番号を含む多くの番号が含まれています。

SQLクエリを記述して、一度だけ出現した数字の中で最大の数字を見つけることができますか?

±– +
| num |
±– +
| 8 |
| 8 |
| 3 |
| 3 |
| 1 |
| 4 |
| 5 |
| 6 |
上記のサンプルデータの場合、クエリステートメントは次の結果を返す必要があります。

±– +
| num |
±– +
| 6 |
注:

1回しか表示されない数字がない場合は、nullを出力します。

回答

# Write your MySQL query statement below
select max(num) as num from
(
select num from my_numbers group by num having count(num)=1
)as template_table 
select 
ifnull(
    (
      select num  from 
		(
		    select num from my_numbers group by num having count(*)=1 order by num desc 
		)as template_table 
limit 1)
,null) as num;

1076.プロジェクトスタッフII

リンク:https://leetcode-cn.com/problems/project-employees-ii

タイトル説明

表:プロジェクト

±------------±-------- +
|列名|タイプ|
±------------±------- -+
| project_id | int |
| employee_id | int |
±------------±-------- +
主キーは(project_id、employee_id)です。
employee_idは、Employeeテーブルの外部キーです。
表:従業員

±-----------------±-------- +
| 列名| タイプ|
±-----------------±-------- +
| employee_id | int |
| 名前| varchar |
| 経験年数| int |
±-----------------±-------- +
主键是employee_id。

SQLクエリを記述して、従業員が最も多いアイテムをレポートします。

クエリ結果の形式は次のとおりです。

プロジェクトテーブル:
±------------±------------ +
| project_id | employee_id |
±------------±------------ +
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 4 |
±------------±------------ +

従業員表:
±------------±-------±----------------- +
| employee_id | 名前| 経験年数|
±------------±-------±----------------- +
| 1 | ハレド| 3 |
| 2 | アリ| 2 |
| 3 | ジョン| 1 |
| 4 | Doe | 2 |
±------------±-------±----------------- +

結果テーブル:
±------------ +
| project_id |
±------------ +
| 1 |
±------------ +
最初のプロジェクトには3人の従業員がいて、2番目のプロジェクトには2人の従業員がいます。

回答

# Write your MySQL query statement below
select project_id 
from Project 
group by project_id 
having count(distinct employee_id) >= all
(
select count(distinct employee_id) from Project group by project_id
)
 
SELECT PROJECT_ID
FROM PROJECT
GROUP BY 1
HAVING COUNT(*) >= ALL (SELECT COUNT(*)
                        FROM PROJECT
                        GROUP BY PROJECT_ID); 

178.スコアランキング

リンク:https://leetcode-cn.com/problems/rank-scores

タイトル説明

スコアランキングを達成するためのSQLクエリを記述します。

2つのスコアが同じである場合、2つのスコアのランク(ランク)は同じです。分割後の次のランキングは、次の連続する整数値である必要があることに注意してください。言い換えれば、ランキングの間に「ギャップ」があってはなりません。

±—±------ +
| Id |スコア|
±—±------ +
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
±—±------ +
たとえば、上記のスコアテーブルによると、クエリは次のように返されます(最高スコアから最低スコアへとランク付けされます)。

±------±----- +
|スコア|ランク|
±------±----- +
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 2 |
| 3.65 | 3 |
| 3.65 | 3 |
| 3.50 | 4 |
±------±----- +
重要な注意:MySQLソリューションの場合、列名として使用される予約語をエスケープする場合は、次を使用できます。キー単語の前後にアポストロフィを使用します。例えばRank

回答

SELECT SCORE, DENSE_RANK() OVER(ORDER BY SCORE DESC) AS 'RANK'
FROM SCORES;
select a.Score as Score,
(select count(distinct b.Score) from Scores b where b.Score >= a.Score) as "Rank"
from Scores a order by a.Score desc

mysqlにはランク関数はありません!

http://fellowtuts.com/mysql/query-to-obtain-rank-function-in-mysql/を参照してください。mysqlにランク関数を実装する方法

おすすめ

転載: blog.csdn.net/qq_45531729/article/details/112203637