Basic SQL (спасите, отцы)

User avatar
Komissar
Уже с Приветом
Posts: 65206
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Basic SQL (спасите, отцы)

Post by Komissar »

Отцы, чегойто я совсем заржавел на этой руководящей работе.

Есть у меня база данных о машинах в гараже на Лубянке. Каждая строка - запись о конкретной машине: VIN, Make, Model, Plate.

Например, колонка Make:

Code: Select all

subaru
subaru
subaru
mazda
ford
honda
mazda
subaru
BMW
BMW
mazda
...

и нужно мне сочинить простенький сиквел на оракле, чтобы в один проход выдала мне сколько машин каждой марки.
скажем, для данной таблицы будет

4 subaru
3 mazda
1 ford
2 BMW
1 honda

как сделать?
User avatar
Serguei666
Уже с Приветом
Posts: 18743
Joined: 11 Jul 2003 01:00

Re: Basic SQL (спасите, отцы)

Post by Serguei666 »

Komissar wrote: 26 Jul 2018 02:02 Отцы, чегойто я совсем заржавел на этой руководящей работе.

Есть у меня база данных о машинах в гараже на Лубянке. Каждая строка - запись о конкретной машине: VIN, Make, Model, Plate.

Например, колонка Make:

Code: Select all

subaru
subaru
subaru
mazda
ford
honda
mazda
subaru
BMW
BMW
mazda
...

и нужно мне сочинить простенький сиквел на оракле, чтобы в один проход выдала мне сколько машин каждой марки.
скажем, для данной таблицы будет

4 subaru
3 mazda
1 ford
2 BMW
1 honda

как сделать?
select count(*),MODEL_NAME from GARAGE_LUBIANKA group by MODEL_NAME

Прежде, чем постить, проверил - вроде, работает как требуется в задании
User avatar
Komissar
Уже с Приветом
Posts: 65206
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Basic SQL (спасите, отцы)

Post by Komissar »

Serguei666 wrote: 26 Jul 2018 02:16
Komissar wrote: 26 Jul 2018 02:02 Отцы, чегойто я совсем заржавел на этой руководящей работе.

Есть у меня база данных о машинах в гараже на Лубянке. Каждая строка - запись о конкретной машине: VIN, Make, Model, Plate.

Например, колонка Make:

Code: Select all

subaru
subaru
subaru
mazda
ford
honda
mazda
subaru
BMW
BMW
mazda
...

и нужно мне сочинить простенький сиквел на оракле, чтобы в один проход выдала мне сколько машин каждой марки.
скажем, для данной таблицы будет

4 subaru
3 mazda
1 ford
2 BMW
1 honda

как сделать?
select count(*),MODEL_NAME from GARAGE_LUBIANKA group by MODEL_NAME

Прежде, чем постить, проверил - вроде, работает как требуется в задании

спасибо, спас. Больше всего у нас марки Voronok.
rainall
Уже с Приветом
Posts: 2679
Joined: 10 Feb 2002 10:01

Re: Basic SQL (спасите, отцы)

Post by rainall »

Komissar wrote: 26 Jul 2018 02:27
спасибо, спас. Больше всего у нас марки Voronok.
Ну так в ТЗ надо было писать про "Больше всего..." тагда может быть и _order by_ кто-нибудь добавил. 8)
User avatar
Komissar
Уже с Приветом
Posts: 65206
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re:Basic SQL (спасите, отцы)

Post by Komissar »

rainall wrote: 26 Jul 2018 02:38
Komissar wrote: 26 Jul 2018 02:27
спасибо, спас. Больше всего у нас марки Voronok.
Ну так в ТЗ надо было писать про "Больше всего..." тагда может быть и _order by_ кто-нибудь добавил. 8)
order by я сам добавил. 8) Есть еще порох в пороховницах :gen1: Я даже сообразил, что если поставить sum (chislo_passazhirov) то можно прикинуть перевозческие способности нашего флота воронков и уазиков.
User avatar
Helmsman
Уже с Приветом
Posts: 6635
Joined: 15 May 2003 00:04
Location: LA

Re: Basic SQL (спасите, отцы)

Post by Helmsman »

Я бы написал count(1) вместо count(*)
User avatar
Serguei666
Уже с Приветом
Posts: 18743
Joined: 11 Jul 2003 01:00

Re: Basic SQL (спасите, отцы)

Post by Serguei666 »

rainall wrote: 26 Jul 2018 02:38
Komissar wrote: 26 Jul 2018 02:27
спасибо, спас. Больше всего у нас марки Voronok.
Ну так в ТЗ надо было писать про "Больше всего..." тагда может быть и _order by_ кто-нибудь добавил. 8)
Да, но в задаче и в примере решения сортировка отсутствовала, я спецом посмотрел, поэтому я не стал перегружать ответ ненужной информацией. Дан минимальный набор SQL слов для решения поставленной задачи
User avatar
Komissar
Уже с Приветом
Posts: 65206
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Basic SQL (спасите, отцы)

Post by Komissar »

Всем откликнувшимся - внеочередная звездочка на погоны, а Сергею еще и денежная премия!
User avatar
+KPOT+
Уже с Приветом
Posts: 7640
Joined: 03 Oct 2014 06:12

Re: Basic SQL (спасите, отцы)

Post by +KPOT+ »

Helmsman wrote: 26 Jul 2018 03:08 Я бы написал count(1) вместо count(*)
А в чём преимущество 1?
User avatar
katit
Уже с Приветом
Posts: 23960
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Re: Basic SQL (спасите, отцы)

Post by katit »

partner_ca wrote: 26 Jul 2018 06:24
+KPOT+ wrote: 26 Jul 2018 06:01 А в чём преимущество 1?
Некоторые верят, что так быстрее. По сути - без разницы
Когда-то раньше было быстрее на SQL Server. Дима поправит. Сейчас вроде без разницы но предпочтительнее использовать синтакс с звездочкой.
Лучше водки — хуже нет! ©
User avatar
Helmsman
Уже с Приветом
Posts: 6635
Joined: 15 May 2003 00:04
Location: LA

Re: Basic SQL (спасите, отцы)

Post by Helmsman »

Для маленьких таблиц - без разницы, дальше - зависит от размера блока и количества полей в таблице. Так на курсе query tuning рассказывали. У меня таблицы довольно большие с кучей полей, отсюда и привычка.
User avatar
katit
Уже с Приветом
Posts: 23960
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Re: Basic SQL (спасите, отцы)

Post by katit »

Helmsman wrote: 26 Jul 2018 17:18 Для маленьких таблиц - без разницы, дальше - зависит от размера блока и количества полей в таблице. Так на курсе query tuning рассказывали. У меня таблицы довольно большие с кучей полей, отсюда и привычка.
Курсы от кого? В MS SQL все это проработано, накосячить сложно, разве что если самому хинты писать. А вот как вспомню Teradata с их курсами постоянными..
Лучше водки — хуже нет! ©
User avatar
Helmsman
Уже с Приветом
Posts: 6635
Joined: 15 May 2003 00:04
Location: LA

Re: Basic SQL (спасите, отцы)

Post by Helmsman »

Oracle, если склероз не врёт. Давно дело было, всё могло и измениться. Специально не проверял.
Посмотрел план для обоих вариантов по самой большой таблице - совершенно одинаков, использует меньший по размеру индекс.
Lavr
Уже с Приветом
Posts: 443
Joined: 29 Aug 2001 09:01
Location: Moscow -> Miami -> San Jose

Re: Basic SQL (спасите, отцы)

Post by Lavr »

Если count(*) то считает все записи. Если count(field_name) то не считает NULL в данном поле.
Или совсем все забыл?
User avatar
Uzito
Уже с Приветом
Posts: 8230
Joined: 06 Feb 2002 10:01
Location: NJ, USA

Re: Basic SQL (спасите, отцы)

Post by Uzito »

count(1) vs count(*) не имеет значения. Всё уже давно оптимизировано и счёт будет по одному из имеющихся индексов первычных или вторичных не нелевые ключи или другихх ненулевых полей.
Книжки по тюнингу оракла/sql 20-летней давности можно смело выкидвать на помойку - они потеряли актуальность. Большинство ошибок, которые делают начинающие девелоперы, ловятся оптимизатором и переписываются на лету.
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: Basic SQL (спасите, отцы)

Post by Dmitry67 »

katit wrote: 26 Jul 2018 16:26
partner_ca wrote: 26 Jul 2018 06:24
+KPOT+ wrote: 26 Jul 2018 06:01 А в чём преимущество 1?
Некоторые верят, что так быстрее. По сути - без разницы
Когда-то раньше было быстрее на SQL Server. Дима поправит. Сейчас вроде без разницы но предпочтительнее использовать синтакс с звездочкой.
Уже лет 30 не быстрее)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
sp123
Уже с Приветом
Posts: 1963
Joined: 24 Feb 2001 10:01
Location: Челябинск -> Everett, WA

Re: Basic SQL (спасите, отцы)

Post by sp123 »

Это в ораклах не быстрее. А вот в hive разница чудовищна, хотя вроде бы тоже sql :)


Sent from my iPhone using Tapatalk Pro

Return to “Вопросы и новости IT”