Mysql學習筆記009

来源:http://www.cnblogs.com/zuosy/archive/2017/06/03/6934857.html
-Advertisement-
Play Games

根據天計算訪問量 先建一個表、插入一些數據 每一條數據表示用戶訪問某網站的日期(如:2000-01-01) mysql> CREATE TABLE t1( -> year YEAR(4), -> month INT(2) UNSIGNED ZEROFILL, -> day INT(2) UNSIGN ...


根據天計算訪問量

 

 

先建一個表、插入一些數據 每一條數據表示用戶訪問某網站的日期(如:2000-01-01)

mysql> CREATE TABLE t1(
-> year YEAR(4),
-> month INT(2) UNSIGNED ZEROFILL,
-> day INT(2) UNSIGNED ZEROFILL
-> );
Query OK, 0 rows affected (0.53 sec)

mysql> INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),
-> (2000,2,23),(2000,2,23);
Query OK, 6 rows affected (0.08 sec)
Records: 6 Duplicates: 0 Warnings: 0

mysql>

 

 

慄子:查詢每個月的訪問天數(重覆的不算)

操作如下:

SELECT year, month, BIT_COUNT(BIT_OR(1<<day)) AS day FROM t1 GROUP BY year, month;

mysql> SELECT year, month,
-> BIT_COUNT(BIT_OR(1<<day)) AS day FROM t1
-> GROUP BY year, month;
+------+-------+-----+
| year | month | day |
+------+-------+-----+
| 2000 | 01 | 3 |
| 2000 | 02 | 2 |
+------+-------+-----+
2 rows in set (0.00 sec)

mysql>

傳送門 分享一個解釋BIT_COUNT()和BIT_OR()的博客。

還有一個傳送們 , 看的書都是和我一樣的。

 

 

查看一下表中的數據:

mysql> SELECT * FROM t1;
+------+-------+------+
| year | month | day |
+------+-------+------+
| 2000 | 01 | 01 |
| 2000 | 01 | 20 |
| 2000 | 01 | 30 |
| 2000 | 02 | 02 |
| 2000 | 02 | 23 |
| 2000 | 02 | 23 |
+------+-------+------+
6 rows in set (0.00 sec)

mysql>

 

 

如果看了進了傳送們也覺得不是很懂的同學,那就聽我白話吧。

看了這個操作:

SELECT year, month, BIT_COUNT(BIT_OR(1<<day)) AS day FROM t1 GROUP BY year, month;

我相信大多數人一定會有兩個疑惑在心中產生,BIT_OR() 和 BIT_COUNT()是幹啥的?為什麼還有這種操作?

首先講解一下BIT_COUNT()函數:

BIT_COUNT(N) 返回的是N(二進位)中的1的個數.

我寫個慄子你就明白了:

SELECT BIT_COUNT(100); 這個的答案是多少?

想一想100的二進位是:1100100

mysql> SELECT bin(100);
+----------+
| bin(100) |
+----------+
| 1100100 |
+----------+
1 row in set (0.00 sec)

mysql>

那答案應該是3嘍?

mysql> SELECT BIT_COUNT(100);
+----------------+
| BIT_COUNT(100) |
+----------------+
| 3 |
+----------------+
1 row in set (0.00 sec)

mysql>

少俠您真是好眼力,答案就是3。

這下知道BIT_COUNT()函數是幹啥的了吧。

 

 

然後我們來接著探討第二個問題BIT_OR()是幹啥的?

別看他們兩個長得很像,但他們不同性質的函數。

BIT_OR(expr)是將expr這個列的所有欄位都OR一遍  計算執行的精確度64位,這裡好多博客都沒有列舉過怎麼用的example 可能是他們認為他簡單了,也可能是他們也不會用(他們肯定不會用,嘿嘿嘿)

那之前的一個shop表作為操作:

SELECT * FROM shop;

mysql> SELECT * FROM shop;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | A | 3.45 |
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | B | 1.45 |
| 0003 | C | 1.69 |
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+---------+--------+-------+
7 rows in set (0.06 sec)

我們把article這一列進行BIT_OR()試一試。 在實驗之前推算一下結果應該是什麼?

0001

0001

0010

0011

0011

0011

OR   0100       

————————

0111

結果應該是這樣的嗎?

mysql> SELECT BIT_OR(article) FROM shop;
+-----------------+
| BIT_OR(article) |
+-----------------+
| 7 |
+-----------------+
1 row in set (0.00 sec)

mysql>

7就是二進位的0111 沒錯吧,並且我不管有多少個1 連續OR 結果都是1 

1 or 1 or 0 or 1  =  1 

轉換成這個問題中的邏輯就是:不管我今天訪問了多少次,我就是訪問過了這個網站(用邏輯表示就是1)

 

 

我們回過頭來再看一遍這種操作:

SELECT year, month, BIT_COUNT(BIT_OR(1<<day)) AS day FROM t1 GROUP BY year, month;

現在看起來就好解釋的多了。1 左移 天數的位 ,相應的位數就表示一個月之中的第幾天(反正64位,夠用)。比如今天2017-06-02

1<<2 就是 100 表示今天我訪問了這個網站。 我將day這欄位OR完之後得到了一個64為的binary (這個數的意義,我想不用解釋了) 再用BIT_COUNT()函數數一下就得到了我們想要的結果(可把我累死了(๑•ᴗ•๑),墨跡了這麼半天不知道講沒講明白)。

 

 

使用AUTO_INCREMENT

 

 

聽名字就知道自動增加,直接上操作:

mysql> CREATE TABLE animals(
-> id MEDIUMINT NOT NULL AUTO_INCREMENT,
-> name CHAR(30) NOT NULL,
-> PRIMARY KEY(id)
-> );
Query OK, 0 rows affected (0.85 sec)

mysql> INSERT INTO animals (name) VALUES
-> ('dog'),('cat'),('penguin'),
-> ('lax'),('whale'),('ostrich');
Query OK, 6 rows affected (0.13 sec)
Records: 6 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM animals;
+----+---------+
| id | name |
+----+---------+
| 1 | dog |
| 2 | cat |
| 3 | penguin |
| 4 | lax |
| 5 | whale |
| 6 | ostrich |
+----+---------+
6 rows in set (0.00 sec)

mysql>

先建了一個animals表 欄位有id 和name。 id設置成自增的主鍵, 插入數據只寫name。 然後id就會自動填充。

 

 

另外還有一個命令可以修改,AUTO_INCREMENT 的起始值。

操作如下:

ALTER TABLE tbl_name AUTO_INCREMENT = 2333;

 

 

to be continued...


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 0x00前言 一個安卓應用可以被調試的條件是應用AndroidManifest.xml顯示指定android:debuggable="true",如果沒有設置android:debuggable的值,則預設android:debuggable="false",所以發佈的應用大部分都是不可調試的,如果 ...
  • 一、VideoView及其相關組件總結 在Android中,播放視頻有2種方式,第一種方式是使用MediaPlayer結合SurfaceView來播放,通過MediaPlayer來控制視頻的播放、暫停、進度等,而通過SurfaceView來顯示視頻內容;第二種方式是使用VideoView來播放,這個 ...
  • 首先註冊高德成為開發者(打開高德地圖,點擊底部的開發者平臺),創建應用,按照要求填寫相應信息 網站:http://lbs.amap.com/api/android-sdk/guide/create-project/get-key 途中包含了發佈版的SHA1安全碼和測試版SHA1安全碼,兩者的值可以看 ...
  • 一,代碼。 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.title=@"NSJSONSerialization"; [self initJson] ...
  • 轉載請註明:http://www.cnblogs.com/igoslly/p/6931519.html DialogFragment使用 & 點擊監聽 /* DialogFragment是用於Activity上展示一個界面的彈出框,如輸入框、警告框、確認框等 * DialogFragment單獨設置 ...
  • 1,單分支倉庫遷移 2, 一次性遷移所有倉庫 checkout 所有需要遷移的分支到本地舊倉庫; $ git push --mirror [email protected]:XXXX.git 參考鏈接:http://www.ruanyifeng.com/blog/2014/06/git_remote.h ...
  • 官方中文文檔是這樣描述的: 就給我們這幾句話 就打發我們了。 就給我們這幾句話 就打發我們了。 按照上面的寫法,根本不知道 - (void)calendarEventReminderReceived:(NSNotification *)notification 方法 什麼時候去調用。 但是我們根據i ...
  • 本節引言 從本節開始我們要講的UI控制項都是跟Adapter(適配器)打交道的,瞭解並學會使用這個Adapter很重要, Adapter是用來幫助填充數據的中間橋梁,簡單點說就是:將各種數據以合適的形式顯示到view上,提供 給用戶看! 1.Adapter概念解析 官方文檔:Adapter 首先我們來 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...