Diferencia entre revisiones de «Solución á práctica DML sobre 7 consultas frecuentes»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 64: Línea 64:
  
 
== Filas que teñen o valor maximo grupal dunha certa columna ==
 
== Filas que teñen o valor maximo grupal dunha certa columna ==
 +
Para cada artigo, atopa o vendedor ou vendedores co prezo máis caro,
  
 +
<syntaxhighlight lang="sql" line enclose="div" highlight="" >
 +
SELECT article, dealer, price
 +
FROM  shop s1
 +
WHERE  price=(SELECT MAX(s2.price)
 +
              FROM shop s2
 +
              WHERE s1.article = s2.article)
 +
ORDER BY article;
 +
+---------+--------+-------+
 +
| article | dealer | price |
 +
+---------+--------+-------+
 +
|    0001 | B      |  3.99 |
 +
|    0002 | A      | 10.99 |
 +
|    0003 | C      |  1.69 |
 +
|    0004 | D      | 19.95 |
 +
+---------+--------+-------+
 +
</syntaxhighlight>
 +
 +
Existen outras posibles solucións (e máis eficientes en termos de rendemento)
  
 
== Uando variables definidas polo usuario ==
 
== Uando variables definidas polo usuario ==

Revisión del 15:55 10 nov 2021

Consultas

Máximo valor dunha columna

Cal é o número de artigo máis alto?

1 SELECT MAX(article) AS article FROM shop;
2 +---------+
3 | article |
4 +---------+
5 |       4 |
6 +---------+

A fila que ten o valor máximo dunha certa columna

Cal é o número de artigo, vendedor e prezo do artigo máis caro?

Cunha subquerý:

1 SELECT article, dealer, price
2 FROM   shop
3 WHERE  price=(SELECT MAX(price) FROM shop);
4 +---------+--------+-------+
5 | article | dealer | price |
6 +---------+--------+-------+
7 |    0004 | D      | 19.95 |
8 +---------+--------+-------+

Cun LEFT JOIN:

1 SELECT s1.article, s1.dealer, s1.price
2 FROM shop s1
3 LEFT JOIN shop s2 ON s1.price < s2.price
4 WHERE s2.article IS NULL;

Con ordenación descendente de filas obtendo a primera fila coa claúsula LIMIT

1 SELECT article, dealer, price
2 FROM shop
3 ORDER BY price DESC
4 LIMIT 1;
De haber varios artigos empatados a prezo máis caro (19.95) amosaríase só un deles

Máximo dunha columna por grupo

Cal é o prezo máis caro por artigo?

 1 SELECT article, MAX(price) AS price
 2 FROM   shop
 3 GROUP BY article
 4 ORDER BY article;
 5 +---------+-------+
 6 | article | price |
 7 +---------+-------+
 8 |    0001 |  3.99 |
 9 |    0002 | 10.99 |
10 |    0003 |  1.69 |
11 |    0004 | 19.95 |
12 +---------+-------+

Filas que teñen o valor maximo grupal dunha certa columna

Para cada artigo, atopa o vendedor ou vendedores co prezo máis caro,

 1 SELECT article, dealer, price
 2 FROM   shop s1
 3 WHERE  price=(SELECT MAX(s2.price)
 4               FROM shop s2
 5               WHERE s1.article = s2.article)
 6 ORDER BY article;
 7 +---------+--------+-------+
 8 | article | dealer | price |
 9 +---------+--------+-------+
10 |    0001 | B      |  3.99 |
11 |    0002 | A      | 10.99 |
12 |    0003 | C      |  1.69 |
13 |    0004 | D      | 19.95 |
14 +---------+--------+-------+
Existen outras posibles solucións (e máis eficientes en termos de rendemento)

Uando variables definidas polo usuario

Usando claves foráneas

Buscando por dúas claves

Calculando visitas por día

Usando AUTO_INCREMENT