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

Минимално разстояние и групиране по

Тук е отлична статия в официалната документация на MySQL:

Цитат:

Редовете, съдържащи груповия максимум на определена колона

Задача:За всеки артикул намерете търговеца или дилъри с най-скъпата цена.

Този проблем може да бъде решен с подзаявка като тази:

SELECT article, dealer, price
FROM   shop s1
WHERE  price=(SELECT MAX(s2.price)
              FROM shop s2
              WHERE s1.article = s2.article);

Предходният пример използва корелирана подзаявка, която може да бъде неефективна (вижте раздел 13.2.10.7, „Корелирани подзаявки“). Други възможности за решаване на проблема са използването на некорелирана подзаявка в клаузата FROM или LEFT JOIN.

Некорелирана подзаявка:

SELECT s1.article, dealer, s1.price
FROM shop s1
JOIN (
  SELECT article, MAX(price) AS price
  FROM shop
  GROUP BY article) AS s2
  ON s1.article = s2.article AND s1.price = s2.price;

ЛЯВО ПРИСЪЕДИНЯВАНЕ:

SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price
WHERE s2.article IS NULL;

LEFT JOIN работи въз основа на това, че когато s1.price е на максималната си стойност, няма s2.price с по-голяма стойност и стойностите на s2 редове ще бъдат NULL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Как да вмъкнете в множество таблици с външни ключове

  2. Създаване на приложение за Android за работа с PHP и MySQL на таблет с Android

  3. Вмъкване ???? в базата данни на mysql при публикуване от C# код на персийски език

  4. Как мога да покажа пълния текст на заявка, създадена от PDO?

  5. Добавете индекс на ПЪЛЕН ТЕКСТ в Доктрина 2 с помощта на пояснения?