[英]MySQL: Select unique value in column based on another columns value
我有一個這樣的表設置:
id | ip | name
---------------------------------
1 | 54.34.32.222 | John
2 | 23.44.64.843 | Rick
3 | 54.34.32.222 | John
4 | 23.44.64.843 | John
5 | 14.432.45.45 | Lisa
6 | 54.34.32.222 | Lisa
7 | 14.432.45.45 | Lisa
我只想為每個名字獲取一個唯一的IP。 例如,約翰兩次出現“54.34.32.222”,所以我只想抓住第一行。 但是“54.34.32.222”也出現在Lisa身上,所以我也想抓住那個IP。
結果應如下所示:
id | ip | name
---------------------------------
1 | 54.34.32.222 | John
2 | 23.44.64.843 | Rick
4 | 23.44.64.843 | John
5 | 14.432.45.45 | Lisa
6 | 54.34.32.222 | Lisa
你如何計算名字出現的次數? 這樣做時,它會計算ip在名稱中出現的次數,但我希望相反。
SELECT MIN(id), COUNT(name), ip, name FROM yourTable GROUP BY ip, name
你從未提到過如何確定在重復的ip
- name
對的情況下要保留哪條記錄。 但是,根據您的示例輸出,您似乎保留了id
值最小的記錄。 在這種情況下,我們可以在分組時獲取MIN(id)
以獲得所需的結果:
SELECT MIN(id), ip, name
FROM yourTable
GROUP BY ip, name
請點擊以下鏈接查看正在運行的演示:
您可以使用以下查詢,該查詢為任何給定名稱選擇IP地址的詞法最小值:
SELECT NAME, MIN(IP) AS IP
FROM TABLENAME
GROUP BY NAME
如果您需要與為該名稱找到的第一條記錄對應的IP地址(即記錄中ID最低的記錄):
SELECT NAME, IP
FROM TABLENAME TN
WHERE ID = (
SELECT MIN(ID)
FROM TABLENAME TN1
WHERE TN1.IP = TN.IP
AND TN1.NAME = TN.NAME
)
這應該適合你
SELECT min(id),ip,name FROM youTable group by ip,name
您可能需要在此處對派生表進行連接以獲得所需內容。 你也可以做subselect,但我會顯示連接解決方案,因為大多數用例它可能會表現更好。
SELECT
yourtable.id AS id,
ip,
name
FROM yourtable
/* join regular table to a derived table
* where you have selected the first row id for each user
*/
INNER JOIN (
SELECT MIN(id)
FROM yourtable
GROUP BY name
) AS min_id_per_name
ON yourtable.id = min_id_per_name.id
ORDER BY yourtable.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.