我有3个表,我想有一个查询,给我的销售额,存款和它们之间的差异的总和,尝试这个,但记录重复。
这是我的疑问:
-- phpMyAdmin SQL Dump
-- version 4.9.11
-- https://www.phpmyadmin.net/
--
-- Servidor: localhost:3306
-- Tiempo de generación: 28-11-2023 a las 16:25:38
-- Versión del servidor: 5.6.41-84.1
-- Versión de PHP: 7.4.33
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Base de datos: `geasacpe_consolidado`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `articulo`
--
CREATE TABLE `articulo` (
`id_articulo` int(11) NOT NULL,
`nombre_articulo` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`precio` decimal(10,2) NOT NULL,
`id_local` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Volcado de datos para la tabla `articulo`
--
INSERT INTO `articulo` (`id_articulo`, `nombre_articulo`, `precio`, `id_local`) VALUES
(1, 'PREMIUN AVENTURERO', '10.00', 1),
(2, 'REGULAR AVENTURERO', '8.00', 1),
(3, 'GLP AVENTURERO', '5.00', 1),
(4, 'PREMIUN EL FIEL', '12.00', 2),
(5, 'REGULAR EL FIEL', '9.00', 2),
(6, 'GLP EL FIEL', '4.00', 2);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `contometro`
--
CREATE TABLE `contometro` (
`id_contometro` int(11) NOT NULL,
`fecha_contometro` date NOT NULL,
`turno_contometro` int(11) NOT NULL,
`inicial_contometro` int(11) NOT NULL,
`final_contometro` int(11) NOT NULL,
`precio_articulo` decimal(10,3) NOT NULL,
`id_local` int(11) NOT NULL,
`id_manguera` int(11) NOT NULL,
`id_punto` int(11) NOT NULL,
`id_lado` int(11) NOT NULL,
`id_articulo` int(11) NOT NULL,
`id_vendedor` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Volcado de datos para la tabla `contometro`
--
INSERT INTO `contometro` (`id_contometro`, `fecha_contometro`, `turno_contometro`, `inicial_contometro`, `final_contometro`, `precio_articulo`, `id_local`, `id_manguera`, `id_punto`, `id_lado`, `id_articulo`, `id_vendedor`) VALUES
(3, '2023-11-28', 1, 0, 10, '10.000', 1, 1, 1, 1, 1, 1),
(4, '2023-11-28', 1, 0, 8, '8.000', 1, 2, 1, 1, 2, 1),
(5, '2023-11-28', 1, 0, 12, '5.000', 1, 3, 1, 1, 3, 1),
(6, '2023-11-28', 1, 0, 13, '10.000', 1, 4, 1, 2, 1, 1);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `depositoxvendedor`
--
CREATE TABLE `depositoxvendedor` (
`id_depositoxvendedor` int(11) NOT NULL,
`fecha_depositoxvendedor` date NOT NULL,
`turno_depositoxvendedor` int(11) NOT NULL,
`numero_depositoxvendedor` int(11) NOT NULL,
`monto_depositoxvendedor` decimal(10,2) NOT NULL,
`id_tipopago` int(11) NOT NULL,
`id_vendedor` int(11) NOT NULL,
`id_local` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Volcado de datos para la tabla `depositoxvendedor`
--
INSERT INTO `depositoxvendedor` (`id_depositoxvendedor`, `fecha_depositoxvendedor`, `turno_depositoxvendedor`, `numero_depositoxvendedor`, `monto_depositoxvendedor`, `id_tipopago`, `id_vendedor`, `id_local`) VALUES
(1, '2023-11-28', 1, 1, '100.00', 1, 1, 1),
(2, '2023-11-28', 1, 2, '150.00', 2, 1, 1),
(3, '2023-11-28', 1, 3, '50.00', 1, 2, 1),
(4, '2023-11-28', 1, 4, '30.00', 2, 2, 1);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `lado`
--
CREATE TABLE `lado` (
`id_lado` int(11) NOT NULL,
`numero_lado` int(11) NOT NULL,
`id_punto` int(11) NOT NULL,
`id_local` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Volcado de datos para la tabla `lado`
--
INSERT INTO `lado` (`id_lado`, `numero_lado`, `id_punto`, `id_local`) VALUES
(1, 1, 1, 1),
(2, 2, 1, 1),
(3, 3, 3, 1),
(4, 4, 3, 1),
(5, 1, 4, 2),
(6, 2, 4, 2),
(7, 3, 2, 2),
(8, 4, 2, 2);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `local`
--
CREATE TABLE `local` (
`id_local` int(11) NOT NULL,
`nombre_local` varchar(50) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Volcado de datos para la tabla `local`
--
INSERT INTO `local` (`id_local`, `nombre_local`) VALUES
(1, 'AVENTURERO'),
(2, 'EL FIEL INCOMPRENDIDO');
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `manguera`
--
CREATE TABLE `manguera` (
`id_manguera` int(11) NOT NULL,
`numero_manguera` int(11) NOT NULL,
`id_lado` int(11) NOT NULL,
`id_articulo` int(11) NOT NULL,
`id_local` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Volcado de datos para la tabla `manguera`
--
INSERT INTO `manguera` (`id_manguera`, `numero_manguera`, `id_lado`, `id_articulo`, `id_local`) VALUES
(1, 1, 1, 1, 1),
(2, 2, 1, 2, 1),
(3, 3, 1, 3, 1),
(4, 1, 2, 1, 1),
(5, 2, 2, 2, 1),
(6, 3, 2, 3, 1);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `punto`
--
CREATE TABLE `punto` (
`id_punto` int(11) NOT NULL,
`marca_punto` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`modelo_punto` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`id_local` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Volcado de datos para la tabla `punto`
--
INSERT INTO `punto` (`id_punto`, `marca_punto`, `modelo_punto`, `id_local`) VALUES
(1, 'GILBARCO AVENTURERO', '3000', 1),
(2, 'TOKEIN EL FIEL', '2000', 2),
(3, 'TOKEIN AVENTURERO', '2000', 1),
(4, 'GILBARCO EL FIEL', '3000', 2);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `puntoxvendedor`
--
CREATE TABLE `puntoxvendedor` (
`id_puntoxvendedor` int(11) NOT NULL,
`fecha_puntoxvendedor` date NOT NULL,
`turno_puntoxvendedor` int(11) NOT NULL,
`id_punto` int(11) NOT NULL,
`id_vendedor` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Volcado de datos para la tabla `puntoxvendedor`
--
INSERT INTO `puntoxvendedor` (`id_puntoxvendedor`, `fecha_puntoxvendedor`, `turno_puntoxvendedor`, `id_punto`, `id_vendedor`) VALUES
(1, '2023-11-28', 1, 1, 1),
(2, '2023-11-28', 1, 3, 2);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `vendedor`
--
CREATE TABLE `vendedor` (
`id_vendedor` int(11) NOT NULL,
`nombre_vendedor` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`id_local` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Volcado de datos para la tabla `vendedor`
--
INSERT INTO `vendedor` (`id_vendedor`, `nombre_vendedor`, `id_local`) VALUES
(1, 'VENDEDOR 1 AVENTURERO', 1),
(2, 'VENDEDOR 2 AVENTURERO', 1),
(3, 'VENDEDOR 1 EL FIEL', 2),
(4, 'VENDEDOR 2 EL FIEL', 2);
--
-- Índices para tablas volcadas
--
--
-- Indices de la tabla `articulo`
--
ALTER TABLE `articulo`
ADD PRIMARY KEY (`id_articulo`),
ADD KEY `id_local` (`id_local`);
--
-- Indices de la tabla `contometro`
--
ALTER TABLE `contometro`
ADD PRIMARY KEY (`id_contometro`),
ADD KEY `id_local` (`id_local`),
ADD KEY `id_manguera` (`id_manguera`),
ADD KEY `id_punto` (`id_punto`),
ADD KEY `id_lado` (`id_lado`),
ADD KEY `id_articulo` (`id_articulo`),
ADD KEY `id_vendedor` (`id_vendedor`);
--
-- Indices de la tabla `depositoxvendedor`
--
ALTER TABLE `depositoxvendedor`
ADD PRIMARY KEY (`id_depositoxvendedor`),
ADD KEY `id_vendedor` (`id_vendedor`),
ADD KEY `id_local` (`id_local`);
--
-- Indices de la tabla `lado`
--
ALTER TABLE `lado`
ADD PRIMARY KEY (`id_lado`),
ADD KEY `id_punto` (`id_punto`),
ADD KEY `id_local` (`id_local`);
--
-- Indices de la tabla `local`
--
ALTER TABLE `local`
ADD PRIMARY KEY (`id_local`);
--
-- Indices de la tabla `manguera`
--
ALTER TABLE `manguera`
ADD PRIMARY KEY (`id_manguera`),
ADD KEY `id_lado` (`id_lado`),
ADD KEY `id_articulo` (`id_articulo`),
ADD KEY `id_local` (`id_local`);
--
-- Indices de la tabla `punto`
--
ALTER TABLE `punto`
ADD PRIMARY KEY (`id_punto`),
ADD KEY `id_local` (`id_local`);
--
-- Indices de la tabla `puntoxvendedor`
--
ALTER TABLE `puntoxvendedor`
ADD PRIMARY KEY (`id_puntoxvendedor`),
ADD KEY `id_punto` (`id_punto`),
ADD KEY `id_vendedor` (`id_vendedor`);
--
-- Indices de la tabla `vendedor`
--
ALTER TABLE `vendedor`
ADD PRIMARY KEY (`id_vendedor`),
ADD KEY `id_local` (`id_local`);
--
-- AUTO_INCREMENT de las tablas volcadas
--
--
-- AUTO_INCREMENT de la tabla `articulo`
--
ALTER TABLE `articulo`
MODIFY `id_articulo` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
--
-- AUTO_INCREMENT de la tabla `contometro`
--
ALTER TABLE `contometro`
MODIFY `id_contometro` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
--
-- AUTO_INCREMENT de la tabla `depositoxvendedor`
--
ALTER TABLE `depositoxvendedor`
MODIFY `id_depositoxvendedor` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- AUTO_INCREMENT de la tabla `lado`
--
ALTER TABLE `lado`
MODIFY `id_lado` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;
--
-- AUTO_INCREMENT de la tabla `local`
--
ALTER TABLE `local`
MODIFY `id_local` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
--
-- AUTO_INCREMENT de la tabla `manguera`
--
ALTER TABLE `manguera`
MODIFY `id_manguera` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
--
-- AUTO_INCREMENT de la tabla `punto`
--
ALTER TABLE `punto`
MODIFY `id_punto` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- AUTO_INCREMENT de la tabla `puntoxvendedor`
--
ALTER TABLE `puntoxvendedor`
MODIFY `id_puntoxvendedor` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
--
-- AUTO_INCREMENT de la tabla `vendedor`
--
ALTER TABLE `vendedor`
MODIFY `id_vendedor` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- Restricciones para tablas volcadas
--
--
-- Filtros para la tabla `articulo`
--
ALTER TABLE `articulo`
ADD CONSTRAINT `articulo_ibfk_1` FOREIGN KEY (`id_local`) REFERENCES `local` (`id_local`);
--
-- Filtros para la tabla `contometro`
--
ALTER TABLE `contometro`
ADD CONSTRAINT `contometro_ibfk_1` FOREIGN KEY (`id_local`) REFERENCES `local` (`id_local`),
ADD CONSTRAINT `contometro_ibfk_2` FOREIGN KEY (`id_manguera`) REFERENCES `manguera` (`id_manguera`),
ADD CONSTRAINT `contometro_ibfk_3` FOREIGN KEY (`id_punto`) REFERENCES `punto` (`id_punto`),
ADD CONSTRAINT `contometro_ibfk_4` FOREIGN KEY (`id_lado`) REFERENCES `lado` (`id_lado`),
ADD CONSTRAINT `contometro_ibfk_5` FOREIGN KEY (`id_articulo`) REFERENCES `articulo` (`id_articulo`),
ADD CONSTRAINT `contometro_ibfk_6` FOREIGN KEY (`id_vendedor`) REFERENCES `vendedor` (`id_vendedor`);
--
-- Filtros para la tabla `depositoxvendedor`
--
ALTER TABLE `depositoxvendedor`
ADD CONSTRAINT `depositoxvendedor_ibfk_1` FOREIGN KEY (`id_vendedor`) REFERENCES `vendedor` (`id_vendedor`),
ADD CONSTRAINT `depositoxvendedor_ibfk_2` FOREIGN KEY (`id_local`) REFERENCES `local` (`id_local`);
--
-- Filtros para la tabla `lado`
--
ALTER TABLE `lado`
ADD CONSTRAINT `lado_ibfk_1` FOREIGN KEY (`id_punto`) REFERENCES `punto` (`id_punto`),
ADD CONSTRAINT `lado_ibfk_2` FOREIGN KEY (`id_local`) REFERENCES `local` (`id_local`);
--
-- Filtros para la tabla `manguera`
--
ALTER TABLE `manguera`
ADD CONSTRAINT `manguera_ibfk_1` FOREIGN KEY (`id_lado`) REFERENCES `lado` (`id_lado`),
ADD CONSTRAINT `manguera_ibfk_2` FOREIGN KEY (`id_articulo`) REFERENCES `articulo` (`id_articulo`),
ADD CONSTRAINT `manguera_ibfk_3` FOREIGN KEY (`id_local`) REFERENCES `local` (`id_local`);
--
-- Filtros para la tabla `punto`
--
ALTER TABLE `punto`
ADD CONSTRAINT `punto_ibfk_1` FOREIGN KEY (`id_local`) REFERENCES `local` (`id_local`);
--
-- Filtros para la tabla `puntoxvendedor`
--
ALTER TABLE `puntoxvendedor`
ADD CONSTRAINT `puntoxvendedor_ibfk_1` FOREIGN KEY (`id_punto`) REFERENCES `punto` (`id_punto`),
ADD CONSTRAINT `puntoxvendedor_ibfk_2` FOREIGN KEY (`id_vendedor`) REFERENCES `vendedor` (`id_vendedor`);
--
-- Filtros para la tabla `vendedor`
--
ALTER TABLE `vendedor`
ADD CONSTRAINT `vendedor_ibfk_1` FOREIGN KEY (`id_local`) REFERENCES `local` (`id_local`);
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
个字符
The query gives me this result
结果应该是:
| 日期|图尔诺|文代多尔|Deposito|轮廓测量|
| --|--|--|--|--|
| 2023年11月28日| 1 |供应商1 AVENTURERO|二百五十|354.00|
2条答案
按热度按时间rmbxnbpk1#
试试这个:
字符串
请注意,答案是使用指定的SQL_MODE值
ONLY_FULL_GROUP_BY
编写的,该值不允许选择列表具有 * 非聚合列,这些列既不在GROUP BY子句中命名,也在功能上不依赖于(唯一确定的)GROUP BY列 *。当我们在SQL_MODE中有值时,如果我们在主查询结束时从group by列表中删除turno
,则发生错误。型
如果我们删除
ONLY_FULL_GROUP_BY
,它将不会失败。最后,这可能超出了我对业务逻辑的关注,但我认为仅使用
id_vendedor
的连接条件不太令人满意。我们是否应该考虑进一步的连接条件,例如在表contometro
和depositoxvendedor
之间匹配日期和turno?b1payxdu2#
问题是所有的
JOINing
都发生在任何聚合之前)sic为SUM()
)。这可能会得到正确的总和。(注意,它消除了对GROUP BY
的需要。)字符串
我不知道如何处理
C.fecha_contometro
和C.turno_contometro
,因为每个供应商都有多个fecha,等等。