sql >> Databáze >  >> RDS >> Mysql

Neznámý sloupec v seznamu polí při použití SUM(něco) JAKO a

Nemůžete vybrat sloupec, který jste definovali na stejné úrovni v SELECT doložka. Pokud chcete znovu použít výraz, musíte se uchýlit k použití odvozené tabulky:

SELECT x.*, (common_p_count+common_r_count)
FROM (
  SELECT 
    a.user AS a_user, 
    b.user AS b_user, 
    SUM(a.post = b.post) AS common_p_count,
    SUM(a.option = b.option) AS common_r_count
  FROM response a, response b
  WHERE a.user = '1' AND b.user != '1' group by b.user
) x

Nebo samozřejmě jednoduše zopakujete výraz:

SELECT 
  a.user AS a_user, 
  b.user AS b_user, 
  SUM(a.post = b.post) AS common_p_count,
  SUM(a.option = b.option) AS common_r_count,
  (SUM(a.post = b.post) + SUM(a.option = b.option))
FROM response a, response b
WHERE a.user = '1' AND b.user != '1' group by b.user

Pokud chcete pouze objednávat podle tohoto výrazu, pak je to možné bez jakýchkoli triků (ale stále nemůžete SELECT výraz na stejné úrovni vašeho dotazu)

SELECT 
  a.user AS a_user, 
  b.user AS b_user, 
  SUM(a.post = b.post) AS common_p_count,
  SUM(a.option = b.option) AS common_r_count
FROM response a, response b
WHERE a.user = '1' AND b.user != '1' group by b.user
ORDER BY common_p_count + common_r_count

Důvod je vysvětlen v tomto článku na blogu zde

Vedlejší poznámka

Kromě výše uvedených vysvětlení si samozřejmě nemyslím, že váš dotaz je správný. Protože seskupujete pouze podle b.user , získáte náhodnou hodnotu pro a.user a pravděpodobně jsou vaše součty nesprávné, stejně jako podle mého názoru získáte náhodný kartézský součin. Ale to je téma na jinou otázku.




  1. umožnit vzdálený přístup k databázi MySQL z libovolné IP adresy

  2. KROMĚ VŠECH ekvivalentů v MySQL

  3. Povolit přidání pouze 3 řádků do tabulky pro konkrétní hodnotu

  4. OracleCommandBuilder.DeriveParameters() vyvolá výjimku Oracle:ORA-06564:objekt neexistuje ORA-06512:na SYS.DBMS_UTILITY