Я использую эту структуру в 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
, os_structure
, count
истинных/ложных результатов равен 64-битной системе (для истины) или 32-битной системе (для false), когда я пытаюсь группировать по ip, результаты более чем ожидаются, я получаю много раз 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
Возможно, граф (отчетливый)
например
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
, попробуйте добавить его вgroup by
, так что этоGROUP BY ip, os_name, os_structure