IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

二、记不住的 MySQL DISTINCT 的用法 ( 下 )

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

文章永久连接:https://tech.souyunku.com/?p=5683

上一章节我们学习了 SQL DISTINCT 的位置对结果的影响。但我们还没深入到 MySQL DISTINCT 关键字的核心用法,同时,我们也还未讲解 DISTINCT 有无小括号是否有影响等,这些,我们会在这一章节全部讲完。

DISTINCT 中的小括号 ()

「 SQL 解析器会忽略 DISTINCT 关键字后面的小括号,而把 DISTINCT 关键字后面的所有列都作为唯一条件 」

我们来看看几个实例

mysql> SELECT DISTINCT(user) FROM fruits;
+-------+
| user  |
+-------+
| penglei |
| hero  |
+-------+
2 rows in set (0.06 sec)

当只有一列时有两条记录

mysql> SELECT DISTINCT(user),fruit FROM fruits;
+-------+--------+
| user  | fruit  |
+-------+--------+
| penglei | apple  |
| penglei | banana |
| penglei | peach  |
| hero  | apple  |
| hero  | peach  |
| hero  | pear   |
+-------+--------+
6 rows in set (0.00 sec)

当带括号时,user 列放在括号内,fruit 放在括号外,会发现有五条记录,而 fruit 也参与了唯一条件检查

mysql> SELECT DISTINCT(fruit),owns FROM fruits;
+--------+------+
| fruit  | owns |
+--------+------+
| apple  |    3 |
| banana |    5 |
| peach  |    3 |
| pear   |    5 |
+--------+------+
4 rows in set (0.02 sec)

当使用 fruit 时就会有 4 条记录 ,因为有两条 apple 3

但是,如果把 fruitowns 都放在括号内,是会报错的

mysql> SELECT DISTINCT(fruit,owns) FROM fruits;
ERROR 1241 (21000): Operand should contain 1 column(s)

好诡异,我暂时还想不到如何解释这种结果

SQL DISTINCT 的基本用法

在日常使用 DISTINCT 关键字时,一般有以下几种

注意: 请留意每种的列的数量

1、单独获取某一列不重复的值

这种情况下,有无小括号的结果是一样的

mysql> SELECT DISTINCT user FROM fruits; +-------+ | user | +-------+ | penglei | | hero | +-------+

mysql> SELECT DISTINCT(user) FROM fruits; +-------+ | user | +-------+ | penglei | | hero | +-------+

2、单独获取某一列不重复值的数量

mysql> SELECT COUNT(DISTINCT(user)) FROM fruits; +-----------------------+ | COUNT(DISTINCT(user)) | +-----------------------+ | 2 | +-----------------------+

3、以多列作为条件获取不同的值

一定要记住,当你使用多列时,并不仅仅时使用小括号内的列,而是全部列

mysql> SELECT DISTINCT(user),fruit FROM fruits; +-------+--------+ | user | fruit | +-------+--------+ | penglei | apple | | penglei | banana | | penglei | peach | | hero | apple | | hero | peach | | hero | pear | +-------+--------+

有可能你仅仅时想返回唯一的 user 列然后附带 fruit 列,比如你想要的结果是这样的

+-------+--------+
| user  | fruit  |
+-------+--------+
| penglei | apple  |
| hero  | apple  |
+-------+--------+

单独的 DISTINCT 关键字并不能实现这样的效果,而且也没有任何意义,因为每个 user 都有三条记录,为什么会单独返回 apple ?

如果你真需要这样的结果,有两种方法

1、附带 SQL WHERE 子句 子句

mysql> SELECT DISTINCT(user),fruit FROM fruits WHERE fruit='apple';
+-------+-------+
| user  | fruit |
+-------+-------+
| penglei | apple |
| hero  | apple |
+-------+-------+

在这种语句下,fruit 返回的值是固定的
2、使用 GROUP BY 子句

mysql> SELECT DISTINCT(user),fruit FROM fruits GROUP BY user;
+-------+-------+
| user  | fruit |
+-------+-------+
| hero  | apple |
| penglei | apple |
+-------+-------+

这种情况下返回的 fruit 是不固定的,虽然,有时候是按照 id 的顺序取值,但并不保障

结束语

只能说,好诡异的 DISTINCT 关键字。使用的时候尽可能的保证列的简单,最好,只使用一列

干货推荐

本站推荐:精选优质专栏

专栏汇总:Redis 教程

专栏汇总:MySQL 教程

专栏汇总:MongoDB 教程

专栏汇总:Memcached 教程

附录:MySQL 拾遗:系列文章


Warning: A non-numeric value encountered in /data/wangzhan/tech.souyunku.com.wp/wp-content/themes/dux/functions-theme.php on line 1154
赞(70) 打赏



未经允许不得转载:搜云库技术团队 » 二、记不住的 MySQL DISTINCT 的用法 ( 下 )

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码
IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

评论 抢沙发

大前端WP主题 更专业 更方便

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏

微信扫一扫打赏


Fatal error: Uncaught Exception: Cache directory not writable. Comet Cache needs this directory please: `/data/wangzhan/tech.souyunku.com.wp/wp-content/cache/comet-cache/cache/https/tech-souyunku-com/index.q`. Set permissions to `755` or higher; `777` might be needed in some cases. in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php:367 Stack trace: #0 [internal function]: WebSharks\CometCache\Classes\AdvancedCache->outputBufferCallbackHandler() #1 /data/wangzhan/tech.souyunku.com.wp/wp-includes/functions.php(5109): ob_end_flush() #2 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(303): wp_ob_end_flush_all() #3 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters() #4 /data/wangzhan/tech.souyunku.com.wp/wp-includes/plugin.php(470): WP_Hook->do_action() #5 /data/wangzhan/tech.souyunku.com.wp/wp-includes/load.php(1097): do_action() #6 [internal function]: shutdown_action_hook() #7 {main} thrown in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php on line 367