Jak uniknąć duplikatów pisząc subquery w select.

Jak uniknąć duplikatów pisząc subquery w select.
kameleo327
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 79
0

screenshot-20201026101814.png

Kopiuj
USE Electrionics
SELECT 
	item_id,
	price,
	(SELECT AVG(price) FROM items) AS avg_price,
	price - (SELECT AVG(price) FROM items) as avg_difference
FROM items

Zaznaczyłem dwa selecty, które zwracają tą samą wartość. Mam pytanie czy istnieje sposób na uproszczenie tego wyrażenia ?
Pomysł jest taki, żeby użyć avg_price w linijce 6, natomiast używam MS SQL i nie działa mi to :(

Kopiuj
USE Electrionics
SELECT 
	item_id,
	price,
	(SELECT AVG(price) FROM items) AS avg_price,
	price - (SELECT avg_price) as avg_difference
FROM items
mad_penguin
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
5

Możesz użyć common table expression:

Kopiuj
WITH Something
AS (
  SELECT 
      item_id,
      price,
      (SELECT AVG(price) FROM items) AS avg_price
  FROM items
)
SELECT
  item_id,
  price,
  avg_prive,
  price - avg_price AS avg_difference
FROM Something

Mogą być błędy składniowe bo dawno nie pisałem w sqlu :)

UglyMan
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2206
1

Wrzucić to wyliczanie w from albo uzyć with

ToTomki
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1366
0

Nie rozumiem co chcesz osiągnąć, jesteś w stanie pokazać mi tabelkę docelową, jaką byś chciał uzyskać (wartości wpisać możesz po prostu w Excelu).

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
3

nie trzeba cte:

Kopiuj
SELECT 
    item_id,
    price,
    avg_price,
    price - avg_price as avg_difference
FROM items
cross join  (SELECT AVG(price) avg_price FROM items)  a

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.