MySQL查询数据,其中列数据不相等
我在MySQL中使用这个结构MySQL查询数据,其中列数据不相等,mysql,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_unicod
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;
我的问题是如何获取数据,而不是从count
结果的同一ip
列获取数据,因为我不擅长统计,欢迎任何改进。
下面是os_name
,os_structure
,count
的示例。当我尝试按ip分组时,真/假结果等于64位系统(表示真)或32位系统(表示假)。结果比预期的要多。我多次得到Windows7 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
也许是计数(不同)
比如说
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。“如何在计数结果上获取数据,但不从同一ip列获取数据”-我需要的不仅仅是这些。如果您希望将每个
ip
的计数分开,请尝试将其添加到group by
子句中,因此它是group by ip,os_名称,os_结构,我编辑并给出了示例和更多信息。如果我按ip
分组,结果比预期的要多,我得到了很多次windows 7 professional,这不是我想要的。那么你想要什么?举个例子会很有帮助。Microsoft Windows 7 Professional True 36我想从数字36中删除相同的ip
,假设有10个(36个)结果具有相同的ip
,我希望结果中的数字是27,因为它们具有相同的ip
(保留10个相同的ip
)作为结果