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

一、记不住的 MySQL DISTINCT 的用法 ( 上 )

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

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

即使在自己记忆力最好的时候,也是记不住 MySQL DISTINCT 的用法。我一直对这个记不住好奇,想不明白,为什么。

前几天翻 MySQL 手册,看到 DISTINCT 又发现自己似乎忘记。

我真的忘记了吗 ?

好像也没有,就是会混淆,到底 DISTINCT 要不要加括号 () ,不加括号又是什么情况呢 ? 这两个记不住

范例数据

在继续之前,我们先需要一个 MySQL 服务器和服务器上的一个 test 数据库中的一个 fruits

创建表和数据的语句如下

CREATE DATABASE IF NOT EXISTS test default character set utf8mb4 collate utf8mb4_unicode_ci;

use test;

CREATE TABLE IF NOT EXISTS `fruits`(
   `id` INT UNSIGNED AUTO_INCREMENT,
   `user` VARCHAR(64) NOT NULL,
   `fruit` VARCHAR(128) NOT NULL,
   `owns` INTEGER(11) NOT NULL,
   PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO fruits(user,fruit,owns) VALUES ('penglei','apple',3),
('penglei','banana',5),
('penglei','peach',3),
('hero','apple',3),
('hero','peach',3),
('hero','pear',5);

运行完语句后,fruits 表显示数据如下

mysql> SELECT * FROM fruits;
+----+-------+--------+------+
| id | user  | fruit  | owns |
+----+-------+--------+------+
|  1 | penglei | apple  |    3 |
|  2 | penglei | banana |    5 |
|  3 | penglei | peach  |    3 |
|  4 | hero  | apple  |    3 |
|  5 | hero  | peach  |    3 |
|  6 | hero  | pear   |    5 |
+----+-------+--------+------+

MySQL DISTINCT 的作用

我们先来看看 MySQL DISTINCT 的作用,其实就是几个字

「 排除重复的行 」

但是,就是因为字少,没有给个限定,如何排除重复的行呢 ?

答案是

「 根据参数所指定的列排除重复的行 」

坑来了,DISTINCT 有带括号和没括号的两种用法,这两种是如何指定参数的呢 ?

等等… 这个官方没给答案…,我们使用过程中发现

1、 如果跟其它函数结合使用,那么只会使用小括号内的参数
2、 否则,那么 DISTINCT 关键字后的所有列都是参数

MySQL DISTINCT 的位置

千万不要认为 DISTINCT 只能放在开头,也不要认为 DISTINCT 可以放在任意位置。

这个关键字的位置是有讲究的:

1. 单独的 DISTINCT 关键字只能放在开头,放在其它位置会报错

比如我们要根据 user 来获取不重复的行,如果像下面这样把 DISTINCT 放在中间是会报错的

mysql> SELECT id, DISTINCT ( user ),fruit,owns FROM fruits;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT ( user ),fruit,owns FROM fruits' at line 1

但如果放在开头,则不会

mysql> SELECT DISTINCT ( user ),id,fruit,owns FROM fruits;
+-------+----+--------+------+
| user  | id | fruit  | owns |
+-------+----+--------+------+
| penglei |  1 | apple  |    3 |
| penglei |  2 | banana |    5 |
| penglei |  3 | peach  |    3 |
| hero  |  4 | apple  |    3 |
| hero  |  5 | peach  |    3 |
| hero  |  6 | pear   |    5 |
+-------+----+--------+------+

好诡异的用法,好诡异的结果 ( 为啥数据会全部显示 ?)

2. 但如果是配合其它的函数使用,比如 COUNT() 则可以任意位置

其实这句话不严谨,应该是其它函数可以任意位置时,DISTINCT 也可以任意位置

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

好诡异的结果!!!!

COUNT(DISTINCT ( user )) 放在末尾以一样

mysql> SELECT fruit, COUNT(DISTINCT ( user )) FROM fruits;
+-------+--------------------------+
| fruit | COUNT(DISTINCT ( user )) |
+-------+--------------------------+
| apple |                        2 |
+-------+--------------------------+
1 row in set (0.00 sec)

这个结果简直诡异到怀疑人生?

至于为什么会这样,我们下一章节再来解释

干货推荐

本站推荐:精选优质专栏

专栏汇总: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
赞(71) 打赏



未经允许不得转载:搜云库技术团队 » 一、记不住的 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