Używaj order by 1tylko, gdy siedzisz przy mysql> monicie. W kodzie użyj ORDER BY id ASC. Zanotuj przypadek, wyraźną nazwę pola i wyraźny kierunek zamawiania.
dotancohen,
Odpowiedzi:
28
Jest to naprawdę zła rzecz do zrobienia IMHO i nie jest obsługiwana na większości innych platform baz danych.
Powody, dla których ludzie to robią:
są leniwi - nie wiem, dlaczego ludzie uważają, że ich wydajność poprawia się, pisząc zwięzły kod, zamiast pisać przez dodatkowe 40 milisekund, aby uzyskać znacznie bardziej dosłowny kod.
Powody, dla których jest zły:
nie jest to samo-dokumentowanie - ktoś będzie musiał przeanalizować listę WYBIERZ, aby dowiedzieć się o grupowaniu. W SQL Server byłoby to nieco bardziej przejrzyste, które nie obsługuje grupowania kowbojów, którzy wiedzą, co się stanie, tak jak MySQL.
jest kruchy - ktoś wchodzi i zmienia listę WYBIERZ, ponieważ użytkownicy biznesowi chcieli innego wyjścia raportu, a teraz twój bałagan. Jeśli użyłeś nazw kolumn w GROUP BY, kolejność na liście WYBIERZ byłaby nieistotna.
SQL Server obsługuje ORDER BY [porządkowy]; oto kilka równoległych argumentów przeciwko jego użyciu:
Niektóre mają column numberdiagramy SQL . Jedna linia mówi: Sortuje wynik według podanego numeru kolumny lub według wyrażenia. Jeśli wyrażenie jest pojedynczym parametrem, wówczas wartość jest interpretowana jako numer kolumny. Ujemne liczby kolumn odwracają porządek sortowania.
Google ma wiele przykładów użycia tego i dlaczego wielu przestało go używać.
Aby być z tobą szczery, nie użyłem liczby kolumn do ORDER BYi GROUP BYod 1996 roku (robiłem Oracle PL / SQL Development w czasie). Używanie numerów kolumn jest tak naprawdę dla starych timerów, a kompatybilność wsteczna pozwala takim programistom korzystać z MySQL i innych RDBMS, które wciąż na to pozwalają.
Musisz sprawdzić liczbę pobrań na usługę dziennie, biorąc pod uwagę aplikacje i aplikacje jako tę samą usługę. Grupowanie przez date, servicesskutkowałoby Appsi Applicationssą traktowane jako oddzielne usługi.
W takim przypadku zapytaniem byłoby:
select date, services, sum(downloads)as downloads
from test.zvijay_test
groupby date,services
Czytałem wiele razy, że jest to leniwy sposób pisania zapytań lub grupowania według kolumny aliasowanej, nie działa w MySQL, ale jest to sposób grupowania według kolumn aliasowanych.
To nie jest preferowany sposób pisania zapytań, używaj go tylko wtedy, gdy naprawdę musisz pogrupować kolumnę aliasu.
„ Ale nadal grupuje usługi, traktując aplikacje i aplikacje jako różne usługi i daje takie same wyniki jak poprzednio ”. Czy nie da się tego rozwiązać, jeśli wybierzesz inną (nie powodującą konfliktu) nazwę dla aliasu?
Daddy32
3
Nie ma ważnego powodu, aby z niego korzystać. Jest to po prostu leniwy skrót specjalnie zaprojektowany, aby utrudnić niektórym trudnym programistom późniejsze ustalenie grupowania lub sortowania lub pozwolić, aby kod nie powiódł się źle, gdy ktoś zmieni kolejność kolumn. Uważaj na innych programistów i nie rób tego.
SELECT dep_month,dep_day_of_week,dep_date,COUNT(*)AS flight_count FROM flights GROUPBY1,2;SELECT dep_month,dep_day_of_week,dep_date,COUNT(*)AS flight_count FROM flights GROUPBY1,2,3;
Rozważ powyższe zapytania: Grupuj według 1 środka, aby pogrupować według pierwszej kolumny i grupuj według 1,2 środka, aby pogrupować według pierwszej i drugiej kolumny i grupuj według 1,2,3 sposobu, aby pogrupować według pierwszej drugiej i trzeciej kolumny. Na przykład:
ten obraz pokazuje pierwsze dwie kolumny pogrupowane według 1,2, tj. nie uwzględnia różnych wartości dep_date w celu znalezienia liczby (do obliczenia liczby brane są pod uwagę wszystkie odrębne kombinacje pierwszych dwóch kolumn), podczas gdy drugie zapytanie daje wynik
obraz. Tutaj bierze się pod uwagę wszystkie pierwsze trzy kolumny i istnieją różne wartości, aby znaleźć liczbę, tj. Grupuje się według wszystkich pierwszych trzech kolumn (aby obliczyć liczbę, brane są pod uwagę wszystkie odrębne kombinacje pierwszych trzech kolumn).
order by 1
tylko, gdy siedzisz przymysql>
monicie. W kodzie użyjORDER BY id ASC
. Zanotuj przypadek, wyraźną nazwę pola i wyraźny kierunek zamawiania.Odpowiedzi:
Jest to naprawdę zła rzecz do zrobienia IMHO i nie jest obsługiwana na większości innych platform baz danych.
Powody, dla których ludzie to robią:
Powody, dla których jest zły:
nie jest to samo-dokumentowanie - ktoś będzie musiał przeanalizować listę WYBIERZ, aby dowiedzieć się o grupowaniu. W SQL Server byłoby to nieco bardziej przejrzyste, które nie obsługuje grupowania kowbojów, którzy wiedzą, co się stanie, tak jak MySQL.
jest kruchy - ktoś wchodzi i zmienia listę WYBIERZ, ponieważ użytkownicy biznesowi chcieli innego wyjścia raportu, a teraz twój bałagan. Jeśli użyłeś nazw kolumn w GROUP BY, kolejność na liście WYBIERZ byłaby nieistotna.
SQL Server obsługuje ORDER BY [porządkowy]; oto kilka równoległych argumentów przeciwko jego użyciu:
źródło
MySQL pozwala robić
GROUP BY
aliasy ( problemy z aliasami kolumn ). Byłoby to znacznie lepsze niż wGROUP BY
przypadku liczb.column number
diagramy SQL . Jedna linia mówi: Sortuje wynik według podanego numeru kolumny lub według wyrażenia. Jeśli wyrażenie jest pojedynczym parametrem, wówczas wartość jest interpretowana jako numer kolumny. Ujemne liczby kolumn odwracają porządek sortowania.Google ma wiele przykładów użycia tego i dlaczego wielu przestało go używać.
Aby być z tobą szczery, nie użyłem liczby kolumn do
ORDER BY
iGROUP BY
od 1996 roku (robiłem Oracle PL / SQL Development w czasie). Używanie numerów kolumn jest tak naprawdę dla starych timerów, a kompatybilność wsteczna pozwala takim programistom korzystać z MySQL i innych RDBMS, które wciąż na to pozwalają.źródło
Rozważ poniższy przypadek:
Musisz sprawdzić liczbę pobrań na usługę dziennie, biorąc pod uwagę aplikacje i aplikacje jako tę samą usługę. Grupowanie przez
date, services
skutkowałobyApps
iApplications
są traktowane jako oddzielne usługi.W takim przypadku zapytaniem byłoby:
I wyjście:
Ale to nie jest to, czego chcesz, ponieważ aplikacje i aplikacje muszą być pogrupowane. Więc co możemy zrobić?
Jednym ze sposobów jest wymiana
Apps
zApplications
użyciemCASE
wyrażenia lubIF
funkcji, a następnie grupowanie ich w usługi jak:Ale nadal grupuje usługi rozważające
Apps
iApplications
jako różne usługi i daje taką samą wydajność jak poprzednio:Grupowanie według numeru kolumny umożliwia grupowanie danych w kolumnie aliasowanej.
W ten sposób uzyskujesz pożądaną wydajność, jak poniżej:
Czytałem wiele razy, że jest to leniwy sposób pisania zapytań lub grupowania według kolumny aliasowanej, nie działa w MySQL, ale jest to sposób grupowania według kolumn aliasowanych.
To nie jest preferowany sposób pisania zapytań, używaj go tylko wtedy, gdy naprawdę musisz pogrupować kolumnę aliasu.
źródło
Nie ma ważnego powodu, aby z niego korzystać. Jest to po prostu leniwy skrót specjalnie zaprojektowany, aby utrudnić niektórym trudnym programistom późniejsze ustalenie grupowania lub sortowania lub pozwolić, aby kod nie powiódł się źle, gdy ktoś zmieni kolejność kolumn. Uważaj na innych programistów i nie rób tego.
źródło
To działa dla mnie. Kod grupuje wiersze do 5 grup.
Wynik będzie następujący
źródło
Rozważ powyższe zapytania: Grupuj według 1 środka, aby pogrupować według pierwszej kolumny i grupuj według 1,2 środka, aby pogrupować według pierwszej i drugiej kolumny i grupuj według 1,2,3 sposobu, aby pogrupować według pierwszej drugiej i trzeciej kolumny. Na przykład:
ten obraz pokazuje pierwsze dwie kolumny pogrupowane według 1,2, tj. nie uwzględnia różnych wartości dep_date w celu znalezienia liczby (do obliczenia liczby brane są pod uwagę wszystkie odrębne kombinacje pierwszych dwóch kolumn), podczas gdy drugie zapytanie daje wynik
obraz. Tutaj bierze się pod uwagę wszystkie pierwsze trzy kolumny i istnieją różne wartości, aby znaleźć liczbę, tj. Grupuje się według wszystkich pierwszych trzech kolumn (aby obliczyć liczbę, brane są pod uwagę wszystkie odrębne kombinacje pierwszych trzech kolumn).
źródło