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

0

screenshot-20201026101814.png

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 :(

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

Możesz użyć common table expression:

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 :)

1

Wrzucić to wyliczanie w from albo uzyć with

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).

3

nie trzeba cte:

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1