Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Посчитать сумму записей с одинаковыми полями без удаления / 15 сообщений из 15, страница 1 из 1
04.04.2019, 22:00
    #39796828
Builder988
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
Столкнулся с проблемой того что нужно посчитать сумму у записей с одинаковым кодом и толщиной.
Тут на картинке вывод данных из таблицы -> https://ibb.co/j3RhR8x
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT `code`.`code`, sklad.thickness, sklad.width, sklad.height, prihod.`name`, (sklad.width * sklad.height)/1000000 AS 'SUM'
FROM sklad
INNER JOIN `code` ON sklad.`code` = `code`.Id
INNER JOIN prihod ON sklad.prihod = prihod.Id
INNER JOIN nakladnay ON sklad.prihnakl = nakladnay.Id
WHERE sklad.type = 2 AND sklad.prihnakl = 1
ORDER BY sklad.thickness, `code`.Id



Тут я реализовал так как знаю -> https://ibb.co/kDyVJRr
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT `code`.`code`, sklad.thickness, sklad.width, sklad.height, prihod.`name`, SUM((sklad.width * sklad.height)/1000000) AS 'SUM'
FROM sklad
INNER JOIN `code` ON sklad.`code` = `code`.Id
INNER JOIN prihod ON sklad.prihod = prihod.Id
INNER JOIN nakladnay ON sklad.prihnakl = nakladnay.Id
WHERE sklad.type = 2 AND sklad.prihnakl = 1
GROUP BY sklad.thickness, `code`.Id



Но мне очень нужно для составления отчета что бы выводило вот так -> https://ibb.co/jRMtzWX

Подскажите пожалуйста как составить такой запрос ?
Заранее за вашу помощь!
...
Рейтинг: 0 / 0
04.04.2019, 22:19
    #39796836
Builder988
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
Builder988Столкнулся с проблемой того что нужно посчитать сумму у записей с одинаковым кодом и толщиной.
Тут на картинке вывод данных из таблицы -> https://ibb.co/j3RhR8x
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT `code`.`code`, sklad.thickness, sklad.width, sklad.height, prihod.`name`, (sklad.width * sklad.height)/1000000 AS 'SUM'
FROM sklad
INNER JOIN `code` ON sklad.`code` = `code`.Id
INNER JOIN prihod ON sklad.prihod = prihod.Id
INNER JOIN nakladnay ON sklad.prihnakl = nakladnay.Id
WHERE sklad.type = 2 AND sklad.prihnakl = 1
ORDER BY sklad.thickness, `code`.Id



Тут я реализовал так как знаю -> https://ibb.co/kDyVJRr
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT `code`.`code`, sklad.thickness, sklad.width, sklad.height, prihod.`name`, SUM((sklad.width * sklad.height)/1000000) AS 'SUM'
FROM sklad
INNER JOIN `code` ON sklad.`code` = `code`.Id
INNER JOIN prihod ON sklad.prihod = prihod.Id
INNER JOIN nakladnay ON sklad.prihnakl = nakladnay.Id
WHERE sklad.type = 2 AND sklad.prihnakl = 1
GROUP BY sklad.thickness, `code`.Id



Но мне очень нужно для составления отчета что бы выводило вот так -> https://ibb.co/jRMtzWX

Подскажите пожалуйста как составить такой запрос ?
Заранее благодарю за вашу помощь!
...
Рейтинг: 0 / 0
04.04.2019, 23:09
    #39796849
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
Builder988Но мне очень нужно для составления отчета что бы выводило вот так -> https://ibb.co/jRMtzWX Ссылки не открываются. Напишите тут, как Вам нужно.
...
Рейтинг: 0 / 0
05.04.2019, 07:32
    #39796917
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
Выложите:

1) DDL таблиц (выполнить SHOW CREATE TABLE tablename и вырезать от CREATE TABLE до последней закрывающей скобки)
2) Образец данных для каждой таблицы (набор INSERT INTO с данными)
3) Желаемый результат на именно таких данных, с объяснением, почему именно так

Первые два пункта - в теге SRC, третий в теге Table (разделитель полей - запятая). Перед публикацией проверить вид текста (кнопка Просмотр).
...
Рейтинг: 0 / 0
05.04.2019, 10:26
    #39797033
Builder988
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
Akina,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for code
-- ----------------------------
DROP TABLE IF EXISTS `code`;
CREATE TABLE `code` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `type` int(11) NOT NULL,
  `code` varchar(25) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of code
-- ----------------------------
INSERT INTO `code` VALUES ('1', '2', '1478');
INSERT INTO `code` VALUES ('2', '2', '1426');
INSERT INTO `code` VALUES ('3', '3', '5712');
INSERT INTO `code` VALUES ('4', '2', '5712');
INSERT INTO `code` VALUES ('5', '2', '126');
INSERT INTO `code` VALUES ('6', '2', '305');
INSERT INTO `code` VALUES ('7', '5', '2344');
INSERT INTO `code` VALUES ('8', '6', '5516');

-- ----------------------------
-- Table structure for nakladnay
-- ----------------------------
DROP TABLE IF EXISTS `nakladnay`;
CREATE TABLE `nakladnay` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `number` int(11) unsigned NOT NULL,
  `Date_S` date NOT NULL,
  `Date_P` date DEFAULT NULL,
  `rosh` tinyint(1) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of nakladnay
-- ----------------------------
INSERT INTO `nakladnay` VALUES ('1', '5004', '2019-03-01', null, '0');
INSERT INTO `nakladnay` VALUES ('2', '5901', '2019-02-01', null, '1');
INSERT INTO `nakladnay` VALUES ('3', '1452', '2019-03-02', null, '0');
INSERT INTO `nakladnay` VALUES ('4', '1537', '2019-02-13', null, '1');
INSERT INTO `nakladnay` VALUES ('5', '1000', '2019-03-17', '2019-04-01', '1');
INSERT INTO `nakladnay` VALUES ('6', '2000', '2019-03-16', null, '0');
INSERT INTO `nakladnay` VALUES ('7', '5902', '2019-03-17', null, '0');

-- ----------------------------
-- Table structure for prihod
-- ----------------------------
DROP TABLE IF EXISTS `prihod`;
CREATE TABLE `prihod` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(35) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of prihod
-- ----------------------------
INSERT INTO `prihod` VALUES ('1', '21.1/19');
INSERT INTO `prihod` VALUES ('2', '1.12/18');
INSERT INTO `prihod` VALUES ('3', 'закупка');
INSERT INTO `prihod` VALUES ('4', '1.1/19');

-- ----------------------------
-- Table structure for sklad
-- ----------------------------
DROP TABLE IF EXISTS `sklad`;
CREATE TABLE `sklad` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `type` int(11) DEFAULT NULL,
  `line_selection` tinyint(1) DEFAULT '0',
  `date` date DEFAULT NULL,
  `date_two` date DEFAULT NULL,
  `prihnakl` int(11) DEFAULT NULL,
  `prihod` int(11) DEFAULT NULL,
  `color` int(11) DEFAULT NULL,
  `code` int(11) DEFAULT NULL,
  `thickness` int(11) DEFAULT NULL,
  `width` int(11) DEFAULT NULL,
  `height` int(11) DEFAULT NULL,
  `comment` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Id`),
  KEY `FK_SKLAD_REFERENCE_CODE` (`code`),
  KEY `FK_SKLAD_REFERENCE_PRIHOD` (`prihod`),
  KEY `FK_SKLAD_REFERENCE_NAKLADNA` (`prihnakl`),
  CONSTRAINT `FK_SKLAD_REFERENCE_CODE` FOREIGN KEY (`code`) REFERENCES `code` (`Id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_SKLAD_REFERENCE_NAKLADNA` FOREIGN KEY (`prihnakl`) REFERENCES `nakladnay` (`Id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_SKLAD_REFERENCE_PRIHOD` FOREIGN KEY (`prihod`) REFERENCES `prihod` (`Id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of sklad
-- ----------------------------
INSERT INTO `sklad` VALUES ('30', '2', '0', '2019-02-15', '2019-03-12', '1', '1', null, '2', '20', '2000', '1200', 'Отрезок\r\nКривоват');
INSERT INTO `sklad` VALUES ('31', '2', '0', '2019-03-04', '2019-03-17', '1', '2', null, '1', '32', '1500', '2500', 'комментарий');
INSERT INTO `sklad` VALUES ('32', '2', '0', '2019-02-07', '2019-03-13', '2', '2', null, '2', '20', '1000', '1500', 'комментарий');
INSERT INTO `sklad` VALUES ('33', '1', '0', '2019-02-15', null, '2', '1', '3', null, '10', '1500', '500', 'Отсутствует');
INSERT INTO `sklad` VALUES ('34', '2', '0', '2019-03-17', '2019-03-17', '5', '3', null, '5', '16', '2800', '2070', 'с кромковкой');
INSERT INTO `sklad` VALUES ('35', '2', '0', '2019-03-16', '2019-03-20', '6', '4', null, '6', '10', '200', '200', 'с кромковкой');
INSERT INTO `sklad` VALUES ('36', '2', '0', '2019-03-16', '2019-03-26', '6', '4', null, '6', '10', '200', '200', 'Отсутствует');
INSERT INTO `sklad` VALUES ('37', '2', '0', '2019-03-17', '2019-03-17', '6', '4', null, '6', '10', '200', '200', 'Отсутствует');
INSERT INTO `sklad` VALUES ('38', '2', '0', '2019-03-16', '2019-03-17', '6', '3', null, '6', '12', '200', '300', 'Отсутствует');
INSERT INTO `sklad` VALUES ('39', '2', '0', '2019-01-15', '2019-03-17', '6', '3', null, '5', '12', '400', '4000', 'Отсутствует');
INSERT INTO `sklad` VALUES ('40', '1', '0', '2019-02-15', '2019-03-12', '5', '2', '4', null, '10', '450', '1000', 'Отсутствует');
INSERT INTO `sklad` VALUES ('41', '3', '0', '2019-03-18', '2019-03-24', '6', '3', '1', null, null, null, null, 'Отсутствует');
INSERT INTO `sklad` VALUES ('42', '4', '0', '2019-02-15', null, '6', '2', '1', null, '10', '450', '1000', 'Отсутствует');
INSERT INTO `sklad` VALUES ('43', '1', '0', '2019-03-20', null, '3', '2', '2', null, '12', '200', '500', 'Отсутствует');
INSERT INTO `sklad` VALUES ('44', '1', '0', '2019-03-20', null, '3', '3', '3', null, '14', '500', '700', 'Отсутствует');
INSERT INTO `sklad` VALUES ('45', '2', '0', '2019-03-23', '2019-03-26', '1', '2', null, '1', '32', '420', '800', 'Отсутствует');
INSERT INTO `sklad` VALUES ('46', '5', '0', '2019-03-24', null, '1', '3', '1', '7', '25', '400', '800', 'Отсутствует');
INSERT INTO `sklad` VALUES ('47', '6', '0', '2019-03-29', null, '3', '3', '3', '8', null, null, null, 'Отсутствует');
INSERT INTO `sklad` VALUES ('48', '7', '0', '2019-03-31', '2019-03-31', '5', '2', '4', null, null, '25', null, 'Отсутствует');
INSERT INTO `sklad` VALUES ('49', '7', '0', '2019-03-31', null, '3', '2', '2', null, null, '25', null, 'Отсутствует');
INSERT INTO `sklad` VALUES ('50', '5', '0', '2019-03-31', null, '5', '3', '2', '7', '25', '1460', '800', 'Отсутствует');
INSERT INTO `sklad` VALUES ('51', '2', '1', '2019-04-01', null, '1', '2', null, '2', '16', '1500', '900', 'Отсутствует');
INSERT INTO `sklad` VALUES ('52', '3', '0', '2019-04-04', null, '1', '3', '3', null, null, null, null, 'с кромковкой');
INSERT INTO `sklad` VALUES ('53', '3', '0', '2019-04-04', null, '1', '2', '4', null, null, null, null, 'Отсутствует');
SET FOREIGN_KEY_CHECKS=1;





Нужно что бы выводило вот так:
Code thickness width height name SUM1426 16 1500 900 1.12/18 1.351426 20 2000 1200 21.1/19 2.41478 32 1500 2500 1.12/18 4.0861478 32 420 800 1.12/18 4.086

Спасибо что откликнулись на проблему)
...
Рейтинг: 0 / 0
05.04.2019, 10:48
    #39797055
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
Как получено значение 4,086?
...
Рейтинг: 0 / 0
05.04.2019, 10:52
    #39797060
Builder988
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
Akina,

Сумма 3 и 4 записи
...
Рейтинг: 0 / 0
05.04.2019, 10:56
    #39797064
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
А почему первые две записи не суммированы, а вторые две - суммированы? по какому признаку разделение/группировка?
...
Рейтинг: 0 / 0
05.04.2019, 10:57
    #39797066
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
И версию MySQL сразу уточните.
...
Рейтинг: 0 / 0
05.04.2019, 11:05
    #39797071
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
Для MySQL 8+ это будет, наверное, так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT code.code, 
       sklad.thickness, 
       sklad.width, 
       sklad.height, 
       prihod.name, 
       sklad.width * sklad.height / 1000000 AS SUM1,
       SUM(sklad.width * sklad.height) OVER (PARTITION BY code, thickness) / 1000000 AS SUM2
FROM sklad
INNER JOIN code ON sklad.code = code.Id
INNER JOIN prihod ON sklad.prihod = prihod.Id
INNER JOIN nakladnay ON sklad.prihnakl = nakladnay.Id
WHERE sklad.type = 2 AND sklad.prihnakl = 1
ORDER BY sklad.thickness, code.Id;



См. fiddle .
...
Рейтинг: 0 / 0
05.04.2019, 11:16
    #39797084
Builder988
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
Akina,

Группируется по коду и толщине.

Версия - 5.6.43-log
...
Рейтинг: 0 / 0
05.04.2019, 11:18
    #39797086
Builder988
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
Akina,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT code.code, 
       sklad.thickness, 
       sklad.width, 
       sklad.height, 
       prihod.name, 
       sklad.width * sklad.height / 1000000 AS SUM1,
       SUM(sklad.width * sklad.height) OVER (PARTITION BY code, thickness) / 1000000 AS SUM2
FROM sklad
INNER JOIN `code` ON sklad.code = code.Id
INNER JOIN prihod ON sklad.prihod = prihod.Id
INNER JOIN nakladnay ON sklad.prihnakl = nakladnay.Id
WHERE sklad.type = 2 AND sklad.prihnakl = 1
ORDER BY sklad.thickness, code.Id;


[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(PARTITION BY code, thickness) / 1000000 AS SUM2
FROM sklad
INNER JOIN `code` ' at line 7
...
Рейтинг: 0 / 0
05.04.2019, 11:36
    #39797105
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
Для 5.6 ничего лучше, чем

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SELECT code.code, 
       sklad.thickness, 
       sklad.width, 
       sklad.height, 
       prihod.name, 
       sklad.width * sklad.height / 1000000 AS SUM1,
       sums.SUM2
FROM sklad
INNER JOIN code ON sklad.code = code.Id
INNER JOIN prihod ON sklad.prihod = prihod.Id
INNER JOIN nakladnay ON sklad.prihnakl = nakladnay.Id
INNER JOIN (SELECT code.code, 
                   sklad.thickness,
                   SUM(sklad.width * sklad.height) / 1000000 AS SUM2
            FROM sklad
            INNER JOIN code ON sklad.code = code.Id
        --    INNER JOIN prihod ON sklad.prihod = prihod.Id
        --    INNER JOIN nakladnay ON sklad.prihnakl = nakladnay.Id
            WHERE sklad.type = 2 AND sklad.prihnakl = 1
            GROUP BY code.code, 
                     sklad.thickness) sums ON (sums.code, sums.thickness) = (code.code, sklad.thickness)
WHERE sklad.type = 2 AND sklad.prihnakl = 1
ORDER BY sklad.thickness, code.Id;


не получается...

Две строки закомментированы, но не могу выловить по логике, можно это делать или нет.

fiddle
...
Рейтинг: 0 / 0
05.04.2019, 11:37
    #39797106
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
Builder988[Err] 1064 - You have an error in your SQL syntax;Ну русским же по белому написано - для ВОСЬМОЙ версии!!!
...
Рейтинг: 0 / 0
05.04.2019, 11:45
    #39797119
Builder988
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сумму записей с одинаковыми полями без удаления
Akina,

Большое спасибо за помощь!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Посчитать сумму записей с одинаковыми полями без удаления / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]