首頁 > 軟體

mybatis中的count()按條件查詢方式

2022-01-15 16:04:34

mybatis count()按條件查詢

1、sql count()函數

count()函數返回匹配指定條件的行數。

sql count(column_name)語法:

count(column_name)函數返回指定列的值的數目(null)不計入。

select count(column_name) from table_name

sql count(*)語法:

count(*)函數返回表中的記錄數。

select count(*) from table_name

sql count(distinct column_name)語法:

count(distinct column_name)函數返回指定列的不同值的數目。

select count(distinct column_name) from table_name

比如下面這張表:table_aid 

+-----+---------+-------+------------+
| aid | site_id | count | date       |
+-----+---------+-------+------------+
|   1 |       1 |    45 | 2016-05-10 |
|   2 |       3 |   100 | 2016-05-13 |
|   3 |       1 |   230 | 2016-05-14 |
|   4 |       2 |    10 | 2016-05-14 |
|   5 |       5 |   205 | 2016-05-14 |
|   6 |       4 |    13 | 2016-05-15 |
|   7 |       3 |   220 | 2016-05-15 |
|   8 |       5 |   545 | 2016-05-16 |
|   9 |       3 |   201 | 2016-05-17 |
+-----+---------+-------+------------+

執行sql語句:

//特定條件下指定列的數目
select count(count) as nums from table_aid
where site_id = 3
//輸出結果:nums值為:521
 
//計算table_aid中總記錄數
select count(*) as nums from table_aid
//輸出結果:nums值為:9
 
//指定列的不同值的數目
select count(distinct site_id) as nums from table_aid
//輸出結果:nums值為:5

2、mybatis中count()按條件查詢

任務描述:資料庫其中有兩個欄位分別為

1、站點:station、

2、狀態:status,status的取值為success或者fail。

現在需求為將記錄按站點分組,且要統計出其中的status為success的數量和為fail的數量。

mybatis程式碼:

 <resultMap id="GroupBaseResultMap" type="java.util.Map">
    <result column="station" jdbcType="VARCHAR" property="station" />
    <result column="successNum" jdbcType="VARCHAR" property="successNum" />
    <result column="totalNum" jdbcType="VARCHAR" property="totalNum"/>
  </resultMap>
  <!--任務統計:按站點    sum(if(type="fail",status,0))-->
  <select id="selectGroupByStation" resultMap="GroupBaseResultMap">
    select rfr.station, count(rfr.status='success' or null) as successNum, count(rfr.status='fail' or null) as failNum, count(1) as totalNum
    from rec_file_report rfr
    GROUP BY station
  </select>

測試結果為:

    {
        "failNum": 2,
        "totalNum": 73,
        "successNum": 71,
        "station": "admin"
    },
    {
        "failNum": 26,
        "totalNum": 521,
        "successNum": 495,
        "station": "[email protected]"
    }

在查詢時使用count(*),total為1,結果為0

在使用count(*)查詢時,發現在console列印的mybatis紀錄檔返回的total為1,但是實際情況應該是0,返回的資料也是0

<== Total: 1

最後才發現,在使用count(*)查詢時,返回的total並不是查詢結果,即使為0,返回的也是1,跟total沒有關係。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com