關於mysql數據庫統計數量的信息

本文目錄一覽:

MySQL利用count()函數統計總數的技巧

2020-03-01

對於count的函數的使用,我們常見的一個錯誤是在括號內隨意指定一個列去統計結果集的行數。但只有指定的行確實都是有值的時候,統計的才是實際的行數,否則可能統計的結果並不是實際的行數。而對於MyISAM存儲引擎,如果某一列的值確實不可能為null時,MySQL內部就會將count()函數優化成count(*),若沒有帶where條件,此時計算速度是非常快的,因為此時沒有實際的去計算表的行數。

總結: 對於MyISAM存儲引擎,不帶where條件的count(*)是非常快的。

技巧:

利用上述MyISAM的count(* )特性,加速一些特定查詢條件的count()查詢。

如:

對於select count(* ) from tablename where id 10; 可以做如下的反轉查詢:

select (select count(* ) from tablename) – count(* ) from tablename where id 10;

因為這樣在查詢階段MySQL將子查詢當做一個常數來處理,大大減少了掃描的行數。

如何用mysql數據庫統計分類下文章數量

直接group by 不就可以了?

select 文章分類,count(*)

from 表

group by 文章分類

是要這樣嗎

Mysql數據庫一個字段內多個值如何統計個數

CREATE TABLE person (

name varchar(20)

);

INSERT INTO person VALUES (‘a,b,c’);

INSERT INTO person VALUES (‘a,b’);

INSERT INTO person VALUES (‘a,c’);

DELIMITER //

DROP FUNCTION GetTextCount //

/**********

— 獲取字符串中有幾個部分.

**********/

CREATE FUNCTION GetTextCount(pSourceText VARCHAR(255), pDivChar CHAR(1))

RETURNS TINYINT

BEGIN

— 預期結果.

DECLARE vResult TINYINT;

— 當前逗號的位置.

DECLARE vIndex INT;

— 前一個逗號的位置.

DECLARE vPrevIndex INT;

— 結果的初始值.

SET vResult = 1;

— 查詢第一個 逗號的位置.

SET vIndex = INSTR(pSourceText, pDivChar);

IF vIndex = 0 THEN

— 參數中沒有逗號,直接返回.

RETURN vResult;

END IF;

— 初始化情況,前一個逗號不存在.

SET vPrevIndex = 0;

— 循環處理。

WHILE vIndex 0 DO

— 結果遞增.

SET vResult = vResult + 1;

— 前一個逗號的位置 = 當前逗號的位置

SET vPrevIndex = vIndex;

— 查詢下一個逗號的位置.

SET vIndex = LOCATE(pDivChar, pSourceText, vPrevIndex + 1);

END WHILE;

— 返回結果.

RETURN vResult;

END;

//

DROP FUNCTION GetTextValue //

/**********

— 獲取字符串中具體某一個部分的數據.

**********/

CREATE FUNCTION GetTextValue(pSourceText VARCHAR(255), pDivChar CHAR(1), pIndex TINYINT)

RETURNS VARCHAR(255)

BEGIN

— 預期結果.

DECLARE vResult VARCHAR(255);

IF pIndex = 1 THEN

SELECT SUBSTRING_INDEX(pSourceText, pDivChar, 1) INTO vResult;

ELSE

SELECT

REPLACE(

SUBSTRING_INDEX(pSourceText, pDivChar, pIndex),

CONCAT(SUBSTRING_INDEX(pSourceText, pDivChar, pIndex – 1) , pDivChar),

”) INTO vResult;

END IF;

— 返回.

RETURN vResult;

END;

//

DELIMITER ;

SELECT

GetTextValue(t.name, ‘,’, MaxNum.No) AS `名稱`,

COUNT(*) AS `個數`

FROM

person t,

(SELECT 1 No UNION ALL

SELECT 2 No UNION ALL

SELECT 3 No UNION ALL

SELECT 4 No UNION ALL

SELECT 5 No ) MaxNum

WHERE

GetTextCount(t.name, ‘,’) = MaxNum.No

GROUP BY

GetTextValue(t.name, ‘,’, MaxNum.No);

+——+——+

| 名稱 | 個數 |

+——+——+

| a | 3 |

| b | 2 |

| c | 2 |

+——+——+

3 rows in set (0.01 sec)

mysql快速查詢數據庫中有多少條數據

今天主要複習了MySQL的一些簡單語句,可總結:

mysql 統計 表的數量:SELECT COUNT(1) FROM information_schema.TABLES WHERE TABLE_SCHEMA = ‘你的數據庫’;

有時候需要查詢MySQL數據庫中各個表大小,該如何操作呢?

MySQL中有一個名為 information_schema 的數據庫,在該庫中有一個 TABLES 表,這個表主要字段分別是:

TABLE_SCHEMA : 數據庫名

TABLE_NAME:表名

ENGINE:所使用的存儲引擎

TABLES_ROWS:記錄數

DATA_LENGTH:數據大小

INDEX_LENGTH:索引大小

use information_schema;

SELECT

TABLE_NAME,

(DATA_LENGTH/1024/1024) as DataM ,

(INDEX_LENGTH/1024/1024) as IndexM,

((DATA_LENGTH+INDEX_LENGTH)/1024/1024) as AllM,

TABLE_ROWS

FROM

TABLES

WHERE

TABLE_SCHEMA = ‘你的數據庫’;

MySQL的一些基礎語句:

行是記錄 列是字段

創建庫

CREATE DATABASE [IF NOT EXISTS] 數據庫名 [參數[ 參數] [ 參數]…];

參數:

CHARACTER SET 碼錶名

COLLATE 校對規則名, 詳見文檔10.10.1

顯示庫

SHOW DATABASES;

顯示數據庫創建語句

SHOW CREATE DATABASE 數據庫名;

修改庫

ALTER DATABASE 數據庫名[ 參數[ 參數][ 參數]…];

注意: 不能改數據庫的名字

刪除庫

DROP DATABASE [IF EXISTS] 數據庫名;

操作表之前使用需要先確定使用哪個數據庫

USE 數據庫名

創建表

CREATE TABLE 表名(列名 類型[,列名 類型][,列名 類型]…);

查看所有表

SHOW TABLES;

查看錶的創建語句

SHOW CREATE TABLE 表名;

顯示錶結構

DESC 表名;

修改表名

RENAME TABLE 原表名 TO 新表名;

修改字符集

ALTER TABLE 表名 CHARACTER SET 字符集名;

刪除表

DROP TABLE 表名;

追加列

ALTER TABLE 表名 ADD 列名 類型[,列名 類型][,列名 類型]…;

修改列類型

ALTER TABLE 表名 MODIFY 列名 類型[,列名 類型][,列名 類型]…;

修改列

ALTER TABLE 表名 CHANGE COLUMN 原列名 新列名 類型;

刪除列

ALTER TABLE 表名 DROP 列名;

插入語法:

INSERT INTO 表名[(列名[,列名]…)] VALUES(值[,值]…);

注意事項:

插入值類型必須與對應列的數據類型一致

數據不能超出長度

插入值得為之必須與列名順序一致

字符和日期數據要放在單引號中

插入空值使用null

如果不指定插入哪一列, 就是插入所有列

中文數據

由於默認碼錶是utf8, 而cmd.exe的碼錶是gbk, 在插入中文數據的時候會報錯, 所以我們需要修改客戶端碼錶

先查看系統變量: SHOW VARIABLES LIKE ‘character%’;

修改客戶端碼錶: SET character_set_client=gbk;

修改輸出數據的碼錶: SET character_set_results=gbk;

修改語法

UPDATE 表名 SET 列名=值[,列名=值]…[WHERE 條件語句];

注意事項

WHERE子句選擇滿足條件的行進行更新, 如果不寫, 則更新所有行

刪除語法

DELETE FROM 表名 [where 條件語句]

注意事項

如果不加where子句, 將刪除表中所有記錄

delete只能用作刪除行, 不能刪除某一列的值, 需要用update

在delete和update的時候需要注意表與表之間的關聯關係

刪除表中所有數據可以使用: TRANCATE 表名, 這種方式會刪除舊錶重新創建, 在數據較多的時候使用

備份數據庫

輸入quit退出mysql, 在cmd.exe中輸入:

mysqldump –u用戶名 –p密碼 數據庫名 文件名

恢複數據庫

進入mysql.exe之後, 使用數據庫之後

source 文件名

操作數據(查詢)

DISTINCT語法

SELECT [DISTINCT] 列名[, 列名]… FROM 表名

注意事項

*可以替代列名, 表示所有列, 但是通常我們為了提高代碼的可讀性, 不使用*

DISTINCT為過濾重複記錄

如果DISTINCT後面跟多列, 是過濾掉多列合併之後的重複

列名表達式——語法

SELECT 列名|表達式[,列名|表達式]… FROM 表名

注意事項

表達式只是顯示時起作用, 不會改變數據庫中的值

AS——

SELECT 列名 AS 別名 FROM 表名

注意事項

起別名時AS可以省略

不會改變數據庫中的值

WHERE——

語法

SELECT 列名 FROM 表名 [WHERE 條件語句]

WHERE子句中的運算符

比較運算符

, , =, =, =,

注意不等於和Java中不同, 是

BETWEEN … AND …

某一區間內的值, 從 … 到 …

IN(列表)

在列表之中, 例: in(1,2,3) 代表1或2或3

LIKE(表達式)

模糊查詢, %代表多個字符, _代表單個字符

IS NULL

判斷是否為NULL

邏輯運算符

AND

與, 兩邊都為TRUE結果為TRUE

OR ||

或, 一邊為TRUE結果就為TRUE

NOT !

非, 將表達式結果取反

ORDER BY——

語法

SELECT 列名 FROM 表名 ORDER BY 列名 ASC|DESC;

注意事項

ORDER BY 指定排序的列名可以是表中的列名, 也可以是SELECT語句後面起的別名

ASC為升序, DESC為降序

ORDER BY應在查詢語句的結尾

COUNT函數——

語法

SELECT COUNT(*)|COUNT(列名) from 表名 [WHERE 條件語句]

注意事項

COUNT(列名)的方式是統計指定列中有多少條記錄, 不包括值為NULL的

COUNT(*)則是統計表中有多少條數據

COUNT(DISTINCT 列名) 統計不重複的記錄數

如果加上WHERE子句, 則是統計滿足條件的記錄

mysql怎麼統計總數

統計所有記錄的數量:

SELECT COUNT(*) FROM table_name

統計某列的數量:

SELECT COUNT(column_name) FROM table_name

where 條件

mysql查詢統計數量

一共加了三條數據

insert into pl_org_region(parent_id,region_sn,region_name,comments) values (0,’001′,’北京大區’,’無’);

insert into pl_org_region(parent_id,region_sn,region_name,comments) values (0,’002′,’西南大區’,’無’);

insert into pl_store (store_sn,region_id,region_name) values (‘P001′,6,’北京大區’);

查詢語句改成:

SELECT

p.region_id,

COUNT(p.region_id) AS cnt,

r.*

FROM

pl_org_region r

LEFT JOIN pl_store p ON r.region_id = p.region_id

GROUP BY

p.region_id;

查詢結果:

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/279185.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-20 15:03
下一篇 2024-12-20 15:03

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • 用Python統計英語單詞數量的方法

    Python是一種高級編程語言,常用於數據分析、人工智能和Web應用程序等領域。在英語學習中,我們經常需要統計文章中的單詞數量,這裡我們將介紹用Python實現這個功能的幾種方法。…

    編程 2025-04-29
  • 如何計算每個類別的數量?

    計算每個類別的數量在數據分析中是非常常見的,本文將從多個方面進行闡述。 一、按照類別列進行分類匯總 import pandas as pd # 創建示例數據 data = {‘ca…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • Java 監控接口返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控接口返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28

發表回復

登錄後才能評論