如何在特定列中选择具有不同值的所有属性(*)?

时间:2015-04-13 10:14:39

标签: sql

以下是学习者w3school数据库的链接:

W3School Database

如果我们执行以下查询:

SELECT DISTINCT city FROM Customers

它会从表中返回一个不同城市属性的列表。

如果我们希望获得与SELECT * FROM Customers查询相同的所有行,并在每行中使用City属性的唯一值,该怎么办。

4 个答案:

答案 0 :(得分:0)

DISTINCT 与多列一起使用时,会同时应用于所有列。因此,考虑所有列的值集合,而不仅仅是一列。

如果你想拥有不同的值,那么连接所有列,这将使它变得不同。

或者,您可以使用 GROUP BY 对行进行分组。

答案 1 :(得分:0)

我想你想要这样的事情:
(将PK字段更改为Customers表主键或索引,如Id

在SQL Server中

SELECT 
    *
FROM (
    SELECT 
        *, ROW_NUMBER() OVER (PARTITION BY City ORDER BY PK) rn
    FROM
        Customers ) Dt
WHERE
    (rn = 1)

在MySQL中

SELECT 
    * 
FORM (
    SELECT 
        a.City, a.PK, count(*) as rn 
    FROM 
        Customers a
        JOIN 
        Customers b ON a.City = b.City AND a.PK >= b.PK
    GROUP BY a.City, a.PK ) As DT
WHERE (rn = 1)

此查询 - 我希望 - 将明确返回您的城市,并显示其他列。

答案 2 :(得分:0)

您需要从customers表中选择所有值,其中city是唯一的。所以,从逻辑上讲,我带来了这样的查询:

SELECT * FROM `customers` WHERE `city` in (SELECT DISTINCT `city` FROM `customers`)

答案 3 :(得分:0)

您可以使用GROUP BY子句获取特定列中的不同值。请考虑下表 - “联系方式”:

+---------+------+---------+
| id      | name | city    |
+---------+------+---------+
| 1       | ABC  | Chennai |
+---------+------+---------+
| 2       | PQR  | Chennai |
+---------+------+---------+
| 3       | XYZ  | Mumbai  |
+---------+------+---------+

要选择City属性中具有不同值的所有列,请使用以下查询:

SELECT * 从联系 GROUP BY city;

这将为您提供如下输出:

+---------+------+---------+
| id      | name | city    |
+---------+------+---------+
| 1       | ABC  | Chennai |
+---------+------+---------+
| 3       | XYZ  | Mumbai  |
+---------+------+---------+