[英]DISTINCT values from multiple columns in sql
我有以下作業:
編寫一條SELECT語句,為每個姓氏和帳單地址與另一個客戶相同的客戶返回一行。 將結果集按姓氏和名字排序。
我嘗試使用DISTINCT
關鍵字來執行此操作,但這不符合我的目的。
出於某種原因,每次我使用GROUP BY
,都會出現以下錯誤:
SELECT FirstName, LastName, BillingAddressID
FROM Customers
GROUP BY LastName;
選擇列表中的“ Customers.FirstName”列無效,因為它既不包含在聚合函數中,也不包含在GROUP BY子句中。
我嘗試了UNION並出現以下錯誤:
SELECT LastName FROM Customers
UNION
SELECT BillingAddressID FROM Customers
將varchar值“ Sherwood”轉換為數據類型int時,轉換失敗。
有人可以指出我正確的方向嗎?
這是我正在處理的數據集的示例
firstname lastname billingaddressid
Allan Sherwood 2
Barry Zimmer 3
Christine Brown 4
David Goldstein 6
Erin Sherwood 7
Frank Lee Wilson 8
Gary Brown 4
Heather Esway 12
因此,查詢應刪除姓氏的重復條目。
嘗試-
SELECT FirstName,
Customers.LastName,
Customers.billingAddressID
FROM Customers INNER JOIN
( SELECT LastName,
billingAddressID
FROM Customers
GROUP BY LastName,
billingAddressID
HAVING COUNT( LastName ) >= 2 ) lastNameQuery
ON Customers.LastName = lastNameQuery.LastName AND
Customers.billingAddressID = lastNameQuery.billingAddressID
ORDER BY Customers.LastName,
FirstName;
我針對使用以下腳本創建的數據庫進行了測試...
CREATE DATABASE Cust;
USE Cust;
CREATE TABLE Customers
(
fldID INT NOT NULL AUTO_INCREMENT,
firstName VARCHAR( 50 ) NOT NULL,
lastName VARCHAR( 50 ),
billingAddressID INT NOT NULL,
PRIMARY KEY ( fldID )
);
我使用-輸入了發問者的樣本數據
INSERT INTO Customers
SET firstName = "Allan",
lastName = "Sherwood",
billingAddressID = 2;
INSERT INTO Customers
SET firstName = "Barry",
lastName = "Zimmer",
billingAddressID = 3;
INSERT INTO Customers
SET firstName = "Christine",
lastName = "Brown",
billingAddressID = 4;
INSERT INTO Customers
SET firstName = "David",
lastName = "Goldstein",
billingAddressID = 6;
INSERT INTO Customers
SET firstName = "Erin",
lastName = "Sherwood",
billingAddressID = 7;
INSERT INTO Customers
SET firstName = "Frank Lee",
lastName = "Wilson",
billingAddressID = 8;
INSERT INTO Customers
SET firstName = "Gary",
lastName = "Brown",
billingAddressID = 10;
INSERT INTO Customers
SET firstName = "Heather",
lastName = "Esway",
billingAddressID = 12;
我還添加了以下內容,以確保重復使用lastName和billingAddressID ...
INSERT INTO Customers
SET firstName = "Don",
lastName = "Sherwood",
billingAddressID = 22;
INSERT INTO Customers
SET firstName = "Timmy",
lastName = "Sherwood",
billingAddressID = 22;
INSERT INTO Customers
SET firstName = "James",
lastName = "Brown",
billingAddressID = 22;
INSERT INTO Customers
SET firstName = "James",
lastName = "Esway",
billingAddressID = 22;
我們的發問者正在詢問的問題,我認為發問者正在尋求幫助的問題是-
Write a SELECT statement that returns one row for each customer that has the same last name and billing address as another customer. Sort the result set by last name then first name.
我對此的解釋是,我們應該為每個客戶返回符合以下條件的記錄:具有姓氏和與AT LEAST至少一個其他客戶共享的BillingAddressID的特定組合,並且返回記錄的列表應按姓氏排序並再分類在名字上。
我的答案的核心是細分-
SELECT LastName,
billingAddressID
FROM Customers
從客戶中僅選擇兩個條件字段。
為此,我添加了-
GROUP BY LastName,
billingAddressID
這會將核心細分結果細化為兩個條件字段的每個唯一組合的列表。
然后,我通過添加-將此列表限制為至少出現兩次的唯一組合。
HAVING COUNT( LastName ) >= 2
然后,我給結果查詢一個lastNameQuery
的別名。
然后,我在兩個條件字段上都將lastNameQuery與Customers一起加入了Customers,以將我們的Customers列表限制為使用-使用一對共享的條件值的客戶
Customers INNER JOIN
( SELECT LastName,
billingAddressID
FROM Customers
GROUP BY LastName,
billingAddressID
HAVING COUNT( LastName ) >= 2 ) lastNameQuery
ON Customers.LastName = lastNameQuery.LastName AND
Customers.billingAddressID = lastNameQuery.billingAddressID
從中,我使用-選擇了所需的字段。
SELECT FirstName,
Customers.LastName,
Customers.billingAddressID
FROM
使用Customers.
由於需要澄清對Customers
和lastNameQuery
中都出現的字段名稱的引用,因此有必要。 沒有這種澄清,MySQL無法確定應使用哪些字段。
通過添加-將此列表按指定順序排序-
ORDER BY Customers.LastName,
FirstName;
我通過測試完整的陳述而得到的結果是-
+-----------+----------+------------------+
| FirstName | LastName | billingAddressID |
+-----------+----------+------------------+
| Gary | Brown | 10 |
| Tom | Brown | 10 |
| Don | Sherwood | 22 |
| Timmy | Sherwood | 22 |
+-----------+----------+------------------+
這些是我的擴展樣本數據集中唯一在條件字段中具有值的共享組合的客戶。
嘗試這個
SELECT * FROM
(
SELECT *,ROW_NUMBER() OVER(PARTITION BY LASTNAME ORDER BY FIRSTNAME) AS RN
FROM YOURTABLE
)T
WHERE RN=2
如果要返回所有唯一記錄。
SELECT * FROM
(
SELECT *,ROW_NUMBER() OVER(PARTITION BY LASTNAME ORDER BY FIRSTNAME) AS RN
FROM YOURTABLE
)T
WHERE RN=1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.