Mysql
 sql >> база данни >  >> RDS >> Mysql

Винаги ли групирането на подредена таблица ще връща първия ред? MYSQL

Не, това не е правилният подход.

Вярвам, че говорите за заявка като тази:

SELECT  product.*, MIN(qty)
FROM    product
GROUP BY
        type
ORDER BY
        qty

Това, което правите тук, е да използвате MySQL разширение на , което ви позволява да избирате неагрегирани/негрупирани колони в GROUP BY заявка.

Това се използва най-вече в заявките, съдържащи както JOIN и GROUP BY на PRIMARY KEY , като това:

SELECT  order.id, order.customer, SUM(price)
FROM    order
JOIN    orderline
ON      orderline.order_id = order.id
GROUP BY
        order.id

Тук, order.customer не е нито групиран, нито агрегиран, но тъй като вие групирате на order.id , гарантира се, че има една и съща стойност във всяка група.

Във вашия случай всички стойности на qty имат различни стойности в групата.

Не е гарантирано от кой запис в групата машината ще вземе стойността.

Трябва да направите следното:

SELECT  p.*
FROM    (
        SELECT  DISTINCT type
        FROM    product p
        ) pd
JOIN    p
ON      p.id = 
        (
        SELECT  pi.id
        FROM    product pi
        WHERE   pi.type = pd.type
        ORDER BY
                type, qty, id
        LIMIT 1
        )

Ако създадете индекс на product (type, qty, id) , тази заявка ще работи бързо.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Форматът на ZF2 за валидиране на дата и час PT_BR винаги Въведената дата не изглежда валидна

  2. PHP PDO - Показване на парола при твърде много връзки

  3. Как да премествам колони в MySQL таблица?

  4. Как да управлявате вашата база данни с администратор

  5. Mysql ляво присъединяване с условие в дясната таблица