EWOULDBLOCK эквивалентный errno в соответствии с Windows Perl

Добро пожаловать в SO

Существует способ без подзапроса для достижения этой цели. Это математически:)

Поскольку вы работаете с двумя таблицами, вы получите результат, умноженный на идентификаторы, на продукт. Так что просто разделите сумму на количество продуктов, разделенное на уникальные идентификаторы, соответствующие этим продуктам:)

Так что-то вроде этого поможет: Схема (MySQL v5.7)

CREATE TABLE INPUT (
  `ID` INTEGER,
  `productName` VARCHAR(9),
  `QTY` INTEGER,
  `buyPrice` INTEGER,
  `sellPrice` INTEGER
);

INSERT INTO INPUT
  (`ID`, `productName`, `QTY`, `buyPrice`, `sellPrice`)
VALUES
  ('1', 'dress 007', '2', '700', '1400'),
  ('2', 'shirt 001', '4', '800', '1900'),
  ('3', 'dress 007', '10', '700', '1500'),
  ('4', 'dress 007', '6', '900', '2900'),
  ('5', 'shirt 001', '2', '750', '1600'),
  ('6', 'hat 008', '2', '300', '600');

CREATE TABLE OUTPUT (
  `ID` INTEGER,
  `productName` VARCHAR(9),
  `QTY` INTEGER
);

INSERT INTO OUTPUT
  (`ID`, `productName`, `QTY`)
VALUES
  ('1', 'dress 007', '4'),
  ('2', 'shirt 001', '2'),
  ('3', 'dress 007', '1'),
  ('4', 'dress 007', '1'),
  ('5', 'shirt 001', '3');

Запрос № 1

SELECT I.productName, 
       SUM(I.QTY)/(COUNT(I.productName)/count(distinct I.ID)) 
                                          as "SUM(QTY)INPUT",
       O.productName,                      
       SUM(O.QTY)/(COUNT(O.productName)/count(distinct O.ID))  
                                          as "SUM(QTY)OUTPUT"
FROM INPUT I
LEFT OUTER JOIN OUTPUT O ON I.productName = O.productName
GROUP BY I.productName
ORDER BY 2 DESC;

| productName | SUM(QTY)INPUT | SUM(QTY)OUTPUT | productName |
| ----------- | ------------- | -------------- | ----------- |
| dress 007   | 18            | 6              | dress 007   |
| shirt 001   | 6             | 5              | shirt 001   |
| hat 008     | 2             | null           | null        |

https://www.db-fiddle.com/f/ Dp7yaNkVf3JW2DZrrvL7G / 1

10
задан Vertexwahn 4 March 2016 в 16:10
поделиться

2 ответа

Под "собственным" Perl Win32 обратите внимание, что $, ^E является более описательным в 33, "Процесс не может получить доступ к файлу, потому что другой процесс заблокировал часть файла", который является ERROR_LOCK_VIOLATION (доступный от Win32:: WinError).

11
ответ дан 3 December 2019 в 22:03
поделиться

Для определенного для Windows кода ошибки Вы хотите использовать $^E. В этом случае это 33: "Процесс не может получить доступ к файлу, потому что другой процесс заблокировал часть файла" (ERROR_LOCK_VIOLATION в winerror.h).

К сожалению, я не думаю Win32:: WinError находится в ядре. С другой стороны, если бы Microsoft когда-нибудь перенумеровывала коды ошибок Windows, то в значительной степени каждая Windows-программа, когда-либо записанная, прекратила бы работать, таким образом, я не думаю, что будет проблема с жестким кодированием она.

5
ответ дан 3 December 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: