mysql相同的行数_mySql:count列中具有相同数据的行数

这篇博客介绍了如何使用MySQL查询来统计表中每个给定日期及字段值组合的出现次数。通过创建一个新的列`all_fields`,组合日期和其他列,并使用`GROUP BY`对这些组合进行计数,展示了一个高效的方法来分析数据表中的模式。
摘要由CSDN通过智能技术生成

如果你有一个如下所示的表:

CREATE TABLE yourtable

(

datefield DATETIME,

col1 VARCHAR(20),

col2 INT NOT NULL,

col3 TINYINT NOT NULL,

col4 CHAR(5)

);

并且您希望每个给定日期重复col1 .. col4的计数,您将运行此查询

SELECT

COUNT(datefield) datefield_count,

LEFT(all_fields,10) datefield,

SUBSTR(all_fields,11) all_other_fields

FROM

(

SELECT

DATE(datefield) datefield,

CONCAT(DATE(datefield),'|',

COALESCE(col1,'< NULL >'),'|',

COALESCE(col2,'< NULL >'),'|',

COALESCE(col3,'< NULL >'),'|',

COALESCE(col4,'< NULL >'),'|') all_fields

FROM

yourtable

) A

GROUP BY all_fields;

以下是一些示例数据和查询结果:

mysql> DROP TABLE IF EXISTS yourtable;

Query OK, 0 rows affected (0.04 sec)

mysql> CREATE TABLE yourtable

-> (

-> datefield DATETIME,

-> col1 VARCHAR(20),

-> col2 INT,

-> col3 TINYINT,

-> col4 CHAR(5)

-> );

Query OK, 0 rows affected (0.11 sec)

mysql> INSERT INTO yourtable VALUES

-> (DATE(NOW() - INTERVAL 1 DAY),'rolando',4,3 ,'angel'),

-> (DATE(NOW() - INTERVAL 1 DAY),'rolando',4,3 ,'angel'),

-> (DATE(NOW() - INTERVAL 1 DAY),'rolando',4,3 ,'angel'),

-> (DATE(NOW() - INTERVAL 1 DAY),'rolando',4,NULL,'angel'),

-> (DATE(NOW() - INTERVAL 1 DAY),'rolando',4,NULL,'angel'),

-> (DATE(NOW() - INTERVAL 2 DAY),'rolando',4,2 ,'angel'),

-> (DATE(NOW() - INTERVAL 2 DAY),'rolando',4,2 ,'angel'),

-> (DATE(NOW() - INTERVAL 2 DAY),'rolando',4,2 ,'angel'),

-> (DATE(NOW() - INTERVAL 2 DAY),'rolando',4,2 ,'angel'),

-> (DATE(NOW() - INTERVAL 2 DAY),'rolando',4,NULL,'edwards'),

-> (DATE(NOW() - INTERVAL 2 DAY),'rolando',4,NULL,'angel'),

-> (DATE(NOW() - INTERVAL 3 DAY),'rolando',5,2 ,'angel'),

-> (DATE(NOW() - INTERVAL 3 DAY),'rolando',5,2 ,'angel'),

-> (DATE(NOW() - INTERVAL 3 DAY),'rolando',4,2 ,'angel'),

-> (DATE(NOW() - INTERVAL 3 DAY),'pamela' ,4,2 ,'angel'),

-> (DATE(NOW() - INTERVAL 3 DAY),'pamela' ,4,NULL,'edwards'),

-> (DATE(NOW() - INTERVAL 3 DAY),'pamela' ,5,2 ,'angel'),

-> (DATE(NOW() - INTERVAL 3 DAY),'pamela' ,5,2 ,'angel'),

-> (DATE(NOW() - INTERVAL 3 DAY),'rolando',4,2 ,'angel'),

-> (DATE(NOW() - INTERVAL 3 DAY),'rolando',4,2 ,'angel'),

-> (DATE(NOW() - INTERVAL 3 DAY),'rolando',4,NULL,'edwards'),

-> (DATE(NOW() - INTERVAL 3 DAY),'rolando',4,NULL,'angel')

-> ;

Query OK, 22 rows affected, 3 warnings (0.03 sec)

Records: 22 Duplicates: 0 Warnings: 3

mysql> SELECT * FROM yourtable;

+---------------------+---------+------+------+-------+

| datefield | col1 | col2 | col3 | col4 |

+---------------------+---------+------+------+-------+

| 2011-06-30 00:00:00 | rolando | 4 | 3 | angel |

| 2011-06-30 00:00:00 | rolando | 4 | 3 | angel |

| 2011-06-30 00:00:00 | rolando | 4 | 3 | angel |

| 2011-06-30 00:00:00 | rolando | 4 | NULL | angel |

| 2011-06-30 00:00:00 | rolando | 4 | NULL | angel |

| 2011-06-29 00:00:00 | rolando | 4 | 2 | angel |

| 2011-06-29 00:00:00 | rolando | 4 | 2 | angel |

| 2011-06-29 00:00:00 | rolando | 4 | 2 | angel |

| 2011-06-29 00:00:00 | rolando | 4 | 2 | angel |

| 2011-06-29 00:00:00 | rolando | 4 | NULL | edwar |

| 2011-06-29 00:00:00 | rolando | 4 | NULL | angel |

| 2011-06-28 00:00:00 | rolando | 5 | 2 | angel |

| 2011-06-28 00:00:00 | rolando | 5 | 2 | angel |

| 2011-06-28 00:00:00 | rolando | 4 | 2 | angel |

| 2011-06-28 00:00:00 | pamela | 4 | 2 | angel |

| 2011-06-28 00:00:00 | pamela | 4 | NULL | edwar |

| 2011-06-28 00:00:00 | pamela | 5 | 2 | angel |

| 2011-06-28 00:00:00 | pamela | 5 | 2 | angel |

| 2011-06-28 00:00:00 | rolando | 4 | 2 | angel |

| 2011-06-28 00:00:00 | rolando | 4 | 2 | angel |

| 2011-06-28 00:00:00 | rolando | 4 | NULL | edwar |

| 2011-06-28 00:00:00 | rolando | 4 | NULL | angel |

+---------------------+---------+------+------+-------+

22 rows in set (0.00 sec)

mysql> SELECT

-> COUNT(datefield) datefield_count,

-> LEFT(all_fields,10) datefield,

-> SUBSTR(all_fields,11) all_other_fields

-> FROM

-> (

-> SELECT

-> DATE(datefield) datefield,

-> CONCAT(DATE(datefield),'|',

-> COALESCE(col1,'< NULL >'),'|',

-> COALESCE(col2,'< NULL >'),'|',

-> COALESCE(col3,'< NULL >'),'|',

-> COALESCE(col4,'< NULL >'),'|') all_fields

-> FROM

-> yourtable

-> ) A

-> GROUP BY all_fields;

+-----------------+------------+----------------------------+

| datefield_count | datefield | all_other_fields |

+-----------------+------------+----------------------------+

| 1 | 2011-06-28 | |pamela|4|2|angel| |

| 1 | 2011-06-28 | |pamela|4|< NULL >|edwar| |

| 2 | 2011-06-28 | |pamela|5|2|angel| |

| 3 | 2011-06-28 | |rolando|4|2|angel| |

| 1 | 2011-06-28 | |rolando|4|< NULL >|angel| |

| 1 | 2011-06-28 | |rolando|4|< NULL >|edwar| |

| 2 | 2011-06-28 | |rolando|5|2|angel| |

| 4 | 2011-06-29 | |rolando|4|2|angel| |

| 1 | 2011-06-29 | |rolando|4|< NULL >|angel| |

| 1 | 2011-06-29 | |rolando|4|< NULL >|edwar| |

| 3 | 2011-06-30 | |rolando|4|3|angel| |

| 2 | 2011-06-30 | |rolando|4|< NULL >|angel| |

+-----------------+------------+----------------------------+

12 rows in set (0.00 sec)

mysql>

我会留给你富有想象力的创造力来循环阅读和打印

datefield

datefield_count

打印all_other_fields 'datefield_count'次

试试看 !!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值