Nasıl Oracle SQL sorgusu basitleştirmek olabilir?

0 Cevap php

Biraz arama ve okuduktan sonra ben benim uygulama için aşağıdaki SQL sorgusu ile geldi:

SELECT
  ROUND(AVG(CASE WHEN gender = 'M' THEN rating END), 1) avgAllM,
  COUNT(CASE WHEN gender = 'M' THEN rating END) countAllM,
  ROUND(AVG(CASE WHEN gender = 'F' THEN rating END), 1) avgAllF,
  COUNT(CASE WHEN gender = 'F' THEN rating END) countAllF,
  ROUND(AVG(CASE WHEN gender = 'M' AND UserAge(birth_date) <= 18 THEN rating END), 1) avgU18M,
  COUNT(CASE WHEN gender = 'M' AND UserAge(birth_date) <= 18 THEN rating END) countU18M,
  ROUND(AVG(CASE WHEN gender = 'F' AND UserAge(birth_date) <= 18 THEN rating END), 1) avgU18F,
  COUNT(CASE WHEN gender = 'F' AND UserAge(birth_date) <= 18 THEN rating END) countU18F
FROM movie_ratings mr INNER JOIN accounts a
  ON mr.aid = a.aid
WHERE mid = 5;

Ve mümkünse ben bu basitleştirmek nasıl merak ediyorum. birth_date alan türü DATE in ve UserAge bu tarih alanında yaşını hesaplamak için bir işlevdir.

Aşağıdaki gibi Tablo yapılardır:

[ACCOUNTS]
aid(PK), birth_date, gender

[MOVIE_RATINGS]
mid(PK), aid(PK,FK), rating

Ben iki şey arıyorum:

  • O daha deneyimli kullanıcılar yukarıda kod Genel sadeleştirmeler ben olmadığını biliyorum.
  • PHP bu yapıyorum ve her kayıt için ben tüm bu değişkenleri içeren bir dizi olacak. Ben çok boyutlu bir diziye grubuna onları bir yol arıyorum, bu yüzden PHP kodu okumak daha kolaydır. Tabii ki PHP'nin kendisi bunu yapmak istemiyorum, bu anlamsız olurdu.

Bu gibi Örneğin, bir şey:

$info[0]['avgAllM']
$info[0]['countAllM']
$info[1]['avgAllF']
$info[1]['countAllF']
$info[2]['avgU18M']
$info[2]['countU18M']
$info[3]['avgU18F']
$info[3]['countU18F']

Yerine:

$info['avgAllM']
$info['countAllM']
$info['avgAllF']
$info['countAllF']
$info['avgU18M']
$info['countU18M']
$info['avgU18F']
$info['countU18F']

Bu mümkün olup olmadığını bile bilmiyorum, bu yüzden gerçekten olup olmadığını merak ve nasıl yapılabilir ediyorum.

Ben bütün bu istediğiniz neden? Peki, yukarıdaki SQL sorgu yapmam gereken tam SQL sadece bir parçası olduğunu. Ben yapmadım henüz çünkü tüm işi yapmadan önce, aynı sonucu elde etmek için daha kompakt bir SQL sorgusu var bilmek istiyorum. Temelde özel tarihte, farklı koşullar üzerinde ancak birlikte olanlar gibi bir kaç satır daha ekleyeceğiz.

0 Cevap