Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak napisaćnajwiększe n na zapytanie typu grupy, ale z dodatkowymi warunkami?

Wymaga to trochę uwagi, gdzie umieścić warunek (do where lub do on ?) żeby nie dać się oszukać :-) Musisz dodać warunek dla t1 do where klauzula i dla t2 na on klauzula:

SELECT t1.type, t1.name, t1.value
FROM mytable t1
LEFT JOIN mytable t2 ON t1.type = t2.type AND t1.value > t2.value 
    AND t2.popularity > 3 /* here */
WHERE t2.value IS NULL 
    AND t1.popularity > 3 /* and here */

Nie testowałem tego, ale powinno działać.

Próba wyjaśnienia: warunek, w którym klauzula WHERE wpływa na elementy, które uważasz za potencjalne elementy o najniższej wartości. Natomiast warunek w on klauzula wpływa na powiązanie:z jakimi innymi elementami chcesz ją porównać? Definiuje grupę, w której porównujesz. Z technicznego punktu widzenia ma to wpływ na to, kiedy t2.* będzie NULL. Czy podałeś warunek na t2.popularity na where zamiast tego nie otrzymasz żadnych wartości NULL (tj. nie znajdziesz elementów o najniższej wartości) dla grup, w których najniższe elementy mają niską popularność.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Narzędzie importu Excel CSV

  2. Jak obliczyć rozmiar z mojego zapytania MySQL?

  3. Użycie symboli wieloznacznych w nazwie tabeli mysql

  4. jak zignorować backticki w codeigniter podczas korzystania z aktywnych rekordów? muszę zamawiać według przypadków

  5. pymssql.OperationalError:komunikat o błędzie DB-Lib 20009, ważność 9