Sql присоединяется только с одного стола - PullRequest
1 голос
/ 11 февраля 2012

Мне нужна помощь с дизайном запроса. У меня есть одна таблица с большим количеством строк (она должна быть в одной таблице).

Table name: 201201
columns = code, batch, value, volume
rows =    301,  2920,  100,   2000
          301,  3192,  40,    800
          302,  6479,  230,   3100
          303,  4930,  20,    50
          303,  3920,  60,    95

Как я могу получить результаты, чтобы они были представлены таким образом:

code, batches, value, volume
301,  2,       140,   2800
302,  1,       230,   3100
303,  2,       80,    145

Я сделал это, когда использую мультипликационные таблицы, но не могу заставить его работать, когда все строки находятся в одной таблице.

Мне удалось получить количество партий и mrdr с этим запросом

SELECT DISTINCT(`201201`.code), count(DISTINCT(z.batch)) as batches
FROM `201201` 
LEFT JOIN `201201` AS z ON `201201`.code = z.code
GROUP BY `201201`.code

Но тогда я застрял. Заранее спасибо.

Новый выпуск! Итак, в той же таблице у меня есть столбец риска, который содержит число с плавающей запятой для каждой партии:

    Table name: 201201
columns = code, batch, value, volume, risk
rows =    301,  2920,  100,   2000,   0.3
          301,  3192,  40,    800,    0.2
          302,  6479,  230,   3100,   0.8
          303,  4930,  20,    50,     0.8
          303,  3920,  60,    95,     1

Я бы хотел умножить риск на значение для каждой строки, а затем суммировать его по коду, как показано ниже.

code, batches, value, volume, risk
301,  2,       140,   2800,   38

Откуда происходит 38, 0,3 * 100 + 0,2 * 40. То же самое для кодов 302 и 303.

Ответы [ 3 ]

1 голос
/ 11 февраля 2012

Зачем вам нужно присоединиться, если вы можете сделать это без присоединения? Надеюсь, это поможет:

SELECT `code`, 
        COUNT(`Batch`) as Batches,
        SUM(`Value`) as TotalValue,
        SUM(`Volume`) as TotalVolume,
        SUM(`Value` * `Risk`) as TotalRisk  -- I'm not sure if this works
FROM `201201`
GROUP BY `code`

Если вышеописанное не работает, попробуйте Self Join:

SELECT a.`code`, 
        COUNT(a.`Batch`) as Batches,
        SUM(a.`Value`) as TotalValue,
        SUM(a.`Volume`) as TotalVolume,
        SUM(b.`SubRisk`) as TotalRisk
FROM `201201` a INNER JOIN 
            (
                SELECT c.`code`, (c.`Value` * c.`Risk`) as SubRisk
                FROM `201201` c
            ) b ON a.`Code` = b.`Code`
GROUP BY `code`
0 голосов
/ 11 февраля 2012
SELECT Code, Count(Batch), Sum(Value), Sum(Count) FROM 201201 GROUP BY Code
0 голосов
/ 11 февраля 2012

похоже, что вы складываете другие значения ..?

SELECT code, count(batch) as batches, sum(value) as values, sum(volume ) as volumes
FROM `201201` 
GROUP BY `201201`.code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...