首页 > 解决方案 > MySQL查询不等于列数据的数据

问题描述

我在 MySQL 中使用这种结构

SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS `statistics`;
CREATE TABLE `statistics` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user` int(255) DEFAULT NULL,
  `machine_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `os_structure` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `os_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `os_version` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `processor_count` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `version` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `country` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `country_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED;

到目前为止的查询是这样的:

SELECT `os_name`, `os_structure`, COUNT(*) AS `count` FROM `statistics` GROUP BY `os_name`, `os_structure` ORDER BY `count` DESC;

我的问题是如何获取数据,但不是从结果的同一ip列获取count,因为我不是统计专家,欢迎任何改进。以下是 , 的示例os_name,当我尝试按 ip 分组时os_structurecount真/假结果等于 64 位系统(为真)或 32 位系统(为假)结果超出预期,我得到了很多次windows 7 professional而不是什么我想。

Microsoft Windows 7 Professional    True    36
Microsoft Windows 10 Pro            True    26
Microsoft Windows 7 Ultimate        False   12
Microsoft Windows 7 Professional    False   11
Microsoft Windows 7 Ultimate        True    5
Microsoft Windows 7 Enterprise      False   1
Microsoft Windows 7 Professional N  True    1
Microsoft Windows 7 Ultimate K      False   1

标签: mysql

解决方案


也许是一个计数(不同)

例如

MariaDB [sandbox]> select status,username from users;
+--------+----------+
| status | username |
+--------+----------+
|     14 | John     |
|     13 | Jane     |
|     12 | Ali      |
|     11 | Bruce    |
|     10 | Martha   |
|      9 | Sidney   |
|      8 | charlie  |
|      7 | Elisa    |
|      6 | Samantha |
|      5 | Hannah   |
|      5 | Hannah   |
|      3 | Kevin    |
+--------+----------+
12 rows in set (0.00 sec)

MariaDB [sandbox]> select status,count(*), count(distinct username) from users group by status;
+--------+----------+--------------------------+
| status | count(*) | count(distinct username) |
+--------+----------+--------------------------+
|      3 |        1 |                        1 |
|      5 |        2 |                        1 |
|      6 |        1 |                        1 |
|      7 |        1 |                        1 |
|      8 |        1 |                        1 |
|      9 |        1 |                        1 |
|     10 |        1 |                        1 |
|     11 |        1 |                        1 |
|     12 |        1 |                        1 |
|     13 |        1 |                        1 |
|     14 |        1 |                        1 |
+--------+----------+--------------------------+
11 rows in set (0.00 sec)

注意状态 5。


推荐阅读