繁体   English   中英

不同的问题

[英]Distinct question

我有一张桌子,上面有两个字段。 名和姓

我想选择唯一的姓氏,但在结果中同时显示名字和姓氏……例如:

'SELECT DISTINCT lastname FROM people

将仅返回姓氏。 如何显示名字?

SQL通常无法很好地应对歧义。 如果只想包含一个姓氏实例,而只包含一个姓氏,则必须描述如何选择哪个姓氏(即使您并不在乎)。 也许:

SELECT MIN(firstname), lastname
FROM ...
GROUP BY lastname

假设您有以下数据:

LastName   FirstName
Jones      Bob
Jones      Dave

您要同时显示“鲍勃·琼斯”和“戴夫·琼斯”吗? 然后你会做:

SELECT DISTINCT名字,姓氏,来自人

如果那不是您想要的,您如何确定使用哪个名字?

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("my_db", $con);

$result = mysql_query("SELECT * FROM Persons");

while($row = mysql_fetch_array($result))
  {
  echo $row['FirstName'] . " " . $row['LastName'];
  echo "<br />";
  }

mysql_close($con);
?>

取自:

http://www.w3schools.com/php/php_mysql_select.asp

非常简单但很好的教程,我认为它非常适用!

考虑到您使用的是MySQL,此查询将起作用并返回“随机”名字(它可能在一段时间内始终返回相同的名字,然后在更新/删除/插入查询后进行更改):

SELECT FirstName, LastName FROM people GROUP BY LastName

请注意,此查询不适用于任何智能RDMBS(即,不适用于MySQL)。 做到这一点(实际上是随机选择名字)的一个好方法是使用解析函数(PostgreSQL语法):

WITH TT AS (
    SELECT FirstName, LastName, ROW_NUMBER() OVER(PARTITION BY LastName ORDER BY random()) AS R
    FROM people
)
SELECT FirstName, LastName
FROM TT
WHERE R = 1;

对于您来说不幸的是,MySQL不了解CTE和分析功能,因此很难随机化此类内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM