MySQL подзапрос, чтобы получить список идентификаторов из одной таблицы для запроса второй таблицы

У меня есть две таблицы, одна products и один salesRecords

Я использую этот запрос:

SELECT 
    DAY(FROM_UNIXTIME(saleDate)) as day,
    MONTH(FROM_UNIXTIME(saleDate)) as mnth,
    YEAR(FROM_UNIXTIME(saleDate)) as yr,   
    COUNT(id) as invCount, SUM(quantity) as qty 
 FROM salesRecords WHERE itemNo IN 
      (SELECT GROUP_CONCAT(convert(id, CHAR(8))) as ids FROM products WHERE brand =100 GROUP by brand) 
    GROUP BY 
       mnth, yr 
    ORDER BY saleDate

Таблица продуктов содержит все, что мне нужно знать о продукте, а salesRecords содержит такие данные, как saleDate, проданное количество, предоставленные скидки и т. Д., Поэтому я пытаюсь достичь списка продаж для всех продуктов с идентификатором бренда. 100 по месяцам и годам из поля Unix Time с именем saleDate

Это работает, но очень медленно.

Кто-нибудь может посоветовать более быстрый способ сделать это?

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

1 ответ

Решение

Я переписал ваш запрос с помощью одного внутреннего соединения. Попробуйте и вернитесь с новостями:

SELECT 
    DAY(FROM_UNIXTIME(saleDate)) as day,
    MONTH(FROM_UNIXTIME(saleDate)) as mnth,
    YEAR(FROM_UNIXTIME(saleDate)) as yr,   
    COUNT(id) as invCount, 
    SUM(quantity) as qty 
 FROM salesRecords s inner join 
      products on s.itemNo = p.id 
 WHERE 
      p.brand =100
 GROUP BY 
       `day`, mnth, yr 
 ORDER BY 
       saleDate

Кроме того, чтобы избежать оговорки, вы можете поставить ограничение в on операция:

    ...
    SUM(quantity) as qty 
 FROM salesRecords s inner join 
      products on p.brand =100 and s.itemNo = p.id 
 GROUP BY 
    ...
Другие вопросы по тегам